PHP動態地建立屬性和方法, 對象的複製, 對象的比較,載入指定的檔案,自動載入類檔案,命名空間

來源:互聯網
上載者:User
這篇文章主要介紹了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動態地建立屬性和方法, 對象的複製, 對象的比較, 載入指定的檔案, 自動載入類檔案, 命名空間 的相關介紹,希望對大家有所協助!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.