這篇文章主要介紹了PHP動態地建立屬性和方法, 對象的複製, 對象的比較, 載入指定的檔案, 自動載入類檔案, 命名空間 的相關資料,需要的朋友可以參考下
PHP前言:
•動態地建立屬性和方法
•對象的複製
•對象的比較
•載入指定的檔案
•自動載入類檔案
•命名空間
樣本
1、類的相關知識點 3(動態地建立屬性和方法)
class/class3.php
<?php/*** 類的相關知識點 3(動態地建立屬性和方法)*/// 用於示範如何動態地建立屬性(這就是 php 中所謂的重載)class Class1{// __set 魔術方法,當設定的屬性不存在或者不可訪問(private)時就會調用此函數public function __set($name, $value){echo "__set \$name: {$name}, \$value: {$value}";echo "<br />";}// __get 魔術方法,當擷取的屬性不存在或者不可訪問(private)時就會調用此函數public function __get($name){echo "__get \$name: {$name}";echo "<br />";return 999;}}$objClass1 = new Class1();// 當你設定的屬性不存在或者不可訪問(private)時,就會調用對應的 __set 魔術方法$objClass1->property1 = wanglei; // 不可訪問的如 private ,或者不存在的// 當你擷取的屬性不存在或者不可訪問(private)時,就會調用對應的 __get 魔術方法echo $objClass1->property2;echo "<br />";// 用於示範如何動態地建立方法(這就是 php 中所謂的重載)class Class2{// __call 魔術方法,當調用的執行個體方法不存在或者不可訪問(private)時就會調用此函數public function __call($name, $arguments){echo "__call \$name: {$name}, \$arguments: " . implode(', ', $arguments);echo "<br />";}// __callStatic 魔術方法,當調用的類方法不存在或者不可訪問(private)時就會調用此函數public static function __callStatic($name, $arguments){echo "__callStatic \$name: {$name}, \$arguments: " . implode(', ', $arguments);echo "<br />";}}$objClass2 = new Class2();// 當你調用的執行個體方法不存在或者不可訪問(private)時,就會調用對應的 __call 魔術方法echo $objClass2->method1("aaa", "bbb");// 當你調用的類方法不存在或者不可訪問(private)時,就會調用對應的 __callStatic 魔術方法echo Class2::method2("aaa", "bbb");
2、類的相關知識點 4(對象的複製,對象的比較)
class/class4.php
<?php/*** 類的相關知識點 4(對象的複製,對象的比較)*/// 用於示範如何複製對象class Class1{public $field1 = "field1";public $field2 = "field2";// 通過 clone 複製對象時,會調用此魔術方法function __clone(){echo "__clone";echo "<br />";}}$objClass1 = new Class1();// 通過 clone 複製對象,會調用 __clone 魔術方法$objClass2 = clone $objClass1;// 通過 clone 複製的對象為淺拷貝(shallow copy),即成員資料之間的一一賦值, 而所有的引用屬性仍然會是一個指向原來的變數的引用(如果要做 deep copy 則需要自己寫)echo $objClass2->field1; // output: field1echo "<br />";echo $objClass2->field2; // output: field2echo "<br />";// 如果兩個對象的屬性和屬性值都相等,則他們“==”相等,if ($objClass1 == $objClass2){echo '$objClass1 == $objClass2';echo "<br />";}// 如果兩個對象的屬性和屬性值都相等,但不是同一個類的執行個體,則他們“===”不相等if ($objClass1 !== $objClass2){echo '$objClass1 !== $objClass2';echo "<br />";}// 如果兩個對象是同一個類的執行個體,則他們“===”相等if ($objClass1 === $objClass1){echo '$objClass1 === $objClass1';echo "<br />";}// 如果兩個對象是同一個類的執行個體,則他們“===”相等$objClass3 = &$objClass1;if ($objClass1 === $objClass3){echo '$objClass1 === $objClass3';echo "<br />";}
3、類的相關知識點 5(載入指定的檔案,自動載入類檔案)
class/class5.php
<?php/*** 類的相關知識點 5(載入指定的檔案,自動載入類檔案)*//** 包含並運行指定檔案,可以是絕對路徑也可以是相對路徑* include 找不到的話則警告,然後繼續運行(include_once: 在當前檔案中只 include 指定檔案一次)* require 找不到的話則錯誤,然後終止運行(require_once: 在當前檔案中只 require 指定檔案一次)* include '';* require '';* include_once '';* require_once '';*/// 示範如何通過 __autoload 魔術方法,來實作類別的自動載入function __autoload($class_name){// 載入指定的檔案require_once $class_name . '.class.php';}// 如果在當前檔案中找不到 MyClass 類,那麼就會去調用 __autoload 魔術方法$obj = new MyClass();echo $obj->name;echo "<br />"; class/MyClass.class.php<?phpclass MyClass{public $name = "webabcd";}
4、類的相關知識點 6(命名空間)
class/class6.php
<?php/*** 類的相關知識點 6(命名空間)*/// 以下代碼僅用於示範,實際項目中不建議在一個檔案中定義多個 namespace// 如果當前檔案中只有一個命名空間,那麼下面的這段可以省略掉命名空間的大括弧,直接 namespace MyNamespace1; 即可namespace MyNamespace1{const MyConst = "MyNamespace1 MyConst";function myFunction(){echo "MyNamespace1 myFunction";echo "<br />";}class MyClass{public function myMethod(){echo "MyNamespace1 MyClass myMethod";echo "<br />";}}}// 定義命名空間時,可以指定路徑namespace Sub1\Sub2\MyNamespace2{const MyConst = "MyNamespace2 MyConst";function myFunction(){echo "MyNamespace2 myFunction";echo "<br />";}class MyClass{public function myMethod(){echo "MyNamespace2 MyClass myMethod";echo "<br />";}}}namespace MyNamespace3{// 調用指定命名空間中的指定常量echo \MyNamespace1\MyConst;echo "<br />";// 調用指定命名空間中的指定函數\MyNamespace1\myFunction();// 執行個體化指定命名空間中的類$obj1 = new \MyNamespace1\MyClass();$obj1->myMethod();}namespace MyNamespace4{// use 指定的命名空間use \Sub1\Sub2\MyNamespace2;// 之後不用再寫全命名空間的路徑了,因為之前 use 過了echo MyNamespace2\MyConst;echo "<br />";MyNamespace2\myFunction();$obj1 = new MyNamespace2\MyClass();$obj1->myMethod();}namespace MyNamespace5{// use 指定的命名空間,並為其設定別名use \Sub1\Sub2\MyNamespace2 as xxx;// 之後再調用命名空間時,可以使用其別名echo xxx\MyConst;echo "<br />";xxx\myFunction();$obj1 = new xxx\MyClass();$obj1->myMethod();}
以上所述是小編給大家介紹的PHP動態地建立屬性和方法, 對象的複製, 對象的比較, 載入指定的檔案, 自動載入類檔案, 命名空間 的相關介紹,希望對大家有所協助!