原创 運用反射機制捕獲類的原型

假如有個person類,代碼如下: class Person{ public $name = 'lightWay'; public $gender; public function say() {

原创 php面向對象之重載(overloading)

在java中,重載就是函數或者方法有相同的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之爲重載函數或者方法,這也牽涉到了多態。 在PHP中呢,有人說php沒有多態,那重載呢? PHP所提供的"重載"(ove

原创 php中的反射機制

PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文

原创 php刪除文件夾

最近要做一個清空緩存的功能,就琢磨了下 寫了一個簡單的刪除文件夾的方法,由於並沒有太多對文件的操作,也就沒封裝成類,有需要的可以拿去,或者完善下,代碼如下: /** * @param $dir string 文件夾名稱

原创 對象的“本”

我們需要跟深入地瞭解這種機制,看對象的“本”。對象是什麼?對象在PHP中也是變量的一種,所以先看PHP源碼中對變量的定義: #zend/zend.h typedef union_zvalue_value{ long lval;/*

原创 對象與類

在前面代碼(兩篇博客)中定義了一個類,並創建了這個類的對象,把前面產生的對象作爲這個新對象的一個熟悉,完整代碼如下: class Person { public $name; public $gender; pu

原创 php中對象克隆和一個簡單的單列類

在多數情況下,我們並不需要完全複製一個對象來獲得其中的屬性。但有一個情況下確實需要:如果你有一個GTK窗口對象,該對象持有窗口的相關資源。 你可能會想複製一個新的窗口,保持所有屬性與原來的窗口相同,但必須是一個新的對象(因爲如果不是一個新

原创 __toString方法

再看另外一個魔術方法__TOstring(在這裏故意這麼寫,是要說明PHP中方法不區分大小寫,但實際開發中還需要注意規範)。 當進行測試時,需要知道是否得出正確的數據。比如打印一個對象時,看看這個對象都有哪些屬性,其值是什麼,如果類定義了

原创 php魔術方法__invoke

PHP5.3新增了一個叫做__invoke的魔術方法,這樣在創建實例後,可以直接調用對象。 就是用函數的方式來用對象,比如我現在有個A類,如果我想防止別人直接輸出對象,那麼我可以這樣: class A { public funct

原创 __call和__callStatic方法

如何防止調用不存在的方法而出錯?一樣的道理,使用__call魔術重載方法。 __call方法原型如下: mixed __call (string $name, array $arguments) 當調用一個不可訪問的方法(如未定義,或者不

原创 對象與數組

對象是什麼,我們不好解釋,也不容易回答,但是我們知道數組是什麼。數組的概念比較簡單。可以拿數組和對象對比來幫助我們理解對象。對象轉化爲數組,數組也能轉化爲對象。數組是由鍵值對數據組成的,數組的鍵值對和對象的屬性/屬性值對十分相似。對象序列

原创 php對象轉換成字符串

比如我有一個類A: class A { public $a; public $b; public $c; public function __construct($a, $b, $c) {

原创 __set和__get方法

__set和__get是兩個比較重要的魔術方法,如下面代碼所示。 <?php class Account { private $user = 1; private $pwd = 2; } $a = new Account

原创 魔術方法的應用

魔術方法是以兩個下劃線“__”開頭、具有特殊作用的一些方法,可以看做是PHP的“語法糖”。 語法糖指那些沒有給計算機語言添加新功能,而只是對人類來說更“甜蜜”的語法。語法糖往往給程序員提供了更多實用的編碼方式或者一些技巧性的用法,有益於

原创 對象的“形”

要回答類與對象本質這個問題,我想可以先從“形”的角度來回答。本節以PHP爲例,來探討對象的“形”與“本”的問題。 類是我們對一組對象的描述 在PHP裏,每個類的定義都是以關鍵字clss開頭,後面跟着類名,緊接着一對花括號,裏面包含有類成員