PHP学习——20 PHP面向对象(类常量与类自动加载)

版权声明:本文为博主原创文章,仅供学习交流,未经博主允许不得转载。 https://blog.csdn.net/zjy_android_blog/article/details/83279119

一、类常量的创建与访问:注意与静态属性的区别与联系

类常量的访问方式:类名::类常量名;静态变量的访问方式也是:类名::类常量名。

<?php 
class Demo
{
	// 类常量就是它的值在类中始终不变的量
	// 类常量是用const关键字创建,不加$符号,必须初始化
	const lang = 'PHP Hello World!';
	// 类常量从php5.3+开始支持nowdoc语法
	const website = <<<'job'
<a href="">www.php.cn</a>
job;
	public function getSiteName(){
		echo $this::lang.'<br>	';
		// 在类的方法中访问类常量: self::类常量名
		return self::lang;
	}
}
// 方法1: 类名::类常量名
echo Demo::website; // www.php.cn
echo '<br>';
// 方法2: 类变量::类常量名 php5.3+
$className = 'Demo';
echo $className::website; // www.php.cn
echo '<br>';
// 方法3: 用类的对象访问类常量
echo (new Demo)::website; // www.php.cn
// 方法4: 用类中的方法间接访问类常量
echo (new Demo)->getSiteName();
// PHP Hello World!
// PHP Hello World!
?>

二、类的自动加载技术:__autoload()和spl_autoload_register()

// Demo.php
<?php 
class Demo
{
	public $name;
	// 构造方法,实例化类的时候,自动调用,通常用来初始化对象
	public function __construct($name='欢迎来到PHP世界'){
		$this->name = $name;
	}

} 
 ?>
// aotoLoader.php
<?php 
// 1. 用require,include导入一个类文件
//  require('Demo.php'); // 导入autoLoader0.php
// include('Demo.php'); // 导入autoLoader0.php
// echo (new Demo)->name; // 欢迎来到PHP世界


// 2. __autoload — 尝试加载未定义的类
// 	当我们引入一个不存在的类时,自动调用它导入该类文件
// 注意:使用这种方式导入类文件,需要文件名与类名相同,例如类名是Demo,文件名也要是Demo,否则就会加载类失败
// function __autoload($className){
//   $path = realpath(__DIR__).'/'.$className.'.php';
//   if(file_exists($path)){
//     require_once($path);
//   }else{
//   	echo $path.'不存在';
//   }
// }
// echo (new Demo('我正在学习PHP'))->name;  // 我正在学习PHP
// echo '<hr>';

// 3. 自定义导入函数,用spl_autoload_register()将自定义的类导入函数添加到函数栈中
// function loader($className){
//   $path = realpath(__DIR__).'/'.$className.'.php';
//   if(file_exists($path)){
//     require_once($path);
//   }else{
//   	echo $path.'不存在';
//   }
// }
// spl_autoload_register('loader');
// echo (new Demo('学习使我快乐'))->name;  // 学习使我快乐
// echo '<hr>';
// 可以调用类中的函数
class LoaderClass
{
	public static function loader($className){
	  $path = realpath(__DIR__).'/'.$className.'.php';
	  if(file_exists($path)){
	    require_once($path);
	  }else{
	  	echo $path.'不存在';
	  }
	}
}
spl_autoload_register(['LoaderClass','loader']);
echo (new Demo('学海无涯'))->name;  // 学海无涯
echo '<hr>';
?>


 

猜你喜欢

转载自blog.csdn.net/zjy_android_blog/article/details/83279119