一、類常量的創建與訪問:注意與靜態屬性的區別與聯繫
類常量的訪問方式:類名::類常量名;靜態變量的訪問方式也是:類名::類常量名。
<?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>';
?>