PHP學習——20 PHP面向對象(類常量與類自動加載)

一、類常量的創建與訪問:注意與靜態屬性的區別與聯繫

類常量的訪問方式:類名::類常量名;靜態變量的訪問方式也是:類名::類常量名。

<?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>';
?>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章