php基礎(chǔ)知識(shí):類與對象(1)
類的定義:
以關(guān)鍵字 class 開頭,后面跟著類名,可以是任何非 PHP 保留字的名字。后面跟著一對花括號(hào),里面包含有類成員和方法的定義。
偽變量$this
可以在當(dāng)一個(gè)方法在對象內(nèi)部調(diào)用時(shí)使用。$this 是一個(gè)到調(diào)用對象(通常是方法所屬于的對象,但也可以是另一個(gè)對象,如果該方法是從第二個(gè)對象內(nèi)靜態(tài)調(diào)用的話)的引用。
//??靜態(tài)調(diào)用的內(nèi)部到底是怎樣的?
看個(gè)例子:
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
}
}
$a = new A();
$a->foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
輸出結(jié)果為:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
/*我希望知道這個(gè)例子的內(nèi)存等的具體實(shí)現(xiàn),我暫時(shí)無法理解。如果有人可以講清楚,可以告訴我。我們宿舍牛頭現(xiàn)在正在冬眠,等他醒來,我會(huì)問。*/
new
要?jiǎng)?chuàng)建一個(gè)對象的實(shí)例,必須創(chuàng)建一個(gè)新對象并將其賦給一個(gè)變量。當(dāng)創(chuàng)建新對象時(shí)該對象總是被賦值,除非該對象定義了構(gòu)造函數(shù)并且在出錯(cuò)時(shí)拋出了一個(gè)異常。
當(dāng)把一個(gè)對象已經(jīng)創(chuàng)建的實(shí)例賦給一個(gè)新變量時(shí),新變量會(huì)訪問同一個(gè)實(shí)例,就和用該對象賦值一樣。此行為和給函數(shù)傳遞入實(shí)例時(shí)一樣??梢杂每寺〗o一個(gè)已創(chuàng)建的對象建立一個(gè)新實(shí)例。
(這幾句話雖然很短,但是未必容易理解。)
例子如下:
class SimpleClass
{
// 成員聲明
public $var = 'a default value';
// 方法聲明
public function displayVar() {
echo $this->var;
}
}
//看下面的圖.1>new 在heap(堆)中實(shí)例化一個(gè)對象。2>將指針$instance指向他
$instance = new SimpleClass();
//3>將指針$assigned指向heap中的實(shí)例化對象
$assigned = $instance;
//4>將$instance的引用(地址)賦值給$reference
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // 5>間斷$instance與heap中實(shí)例的連接。
var_dump($instance);
var_dump($reference);
var_dump($assigned);
輸出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
圖示整個(gè)過程:
類繼承extends
一個(gè)類可以在聲明中用 extends 關(guān)鍵字繼承另一個(gè)類的方法和成員。不能擴(kuò)展多個(gè)類,只能繼承一個(gè)基類。
被繼承的方法和成員可以通過用同樣的名字重新聲明被覆蓋,除非父類定義方法時(shí)使用了 final 關(guān)鍵字??梢酝ㄟ^ parent:: 來訪問被覆蓋的方法或成員。(繼承的機(jī)制到底怎樣的?)
源代碼如下:
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
輸出:
Extending class
a default value
- PHP類與對象后期靜態(tài)綁定操作實(shí)例詳解
- 詳解php中的類與對象(繼承)
- PHP類與對象中的private訪問控制的疑問
- php基礎(chǔ)知識(shí):類與對象(5) static
- php基礎(chǔ)知識(shí):類與對象(4) 范圍解析操作符(::)
- php基礎(chǔ)知識(shí):類與對象(3) 構(gòu)造函數(shù)和析構(gòu)函數(shù)
- php基礎(chǔ)知識(shí):類與對象(2) 自動(dòng)加載對象
- PHP學(xué)習(xí)記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【接口、抽象類、靜態(tài)方法等】
- PHP學(xué)習(xí)記錄之面向?qū)ο螅∣bject-oriented programming,OOP)基礎(chǔ)【類、對象、繼承等】
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)子類擴(kuò)展父類(子類重新載入父類)操作詳解
- PHP中類與對象功能、用法實(shí)例解讀
相關(guān)文章
php magic_quotes_gpc的一點(diǎn)認(rèn)識(shí)與分析
最近一直在做一個(gè)文章發(fā)布系統(tǒng),做了改,改了做,一直到現(xiàn)在還沒竣工.... 為了達(dá)到更好的兼容性,其中的程序涉及到了magic_quotes_gpc,看了下手冊,又找了些資料,分析了下,分享給大家。2008-08-08Zend framework處理一個(gè)http請求的流程分析
Zend framework處理一個(gè)http請求的流程分析,有助于大家提高知識(shí)面。2010-02-02PHP編程實(shí)現(xiàn)多維數(shù)組按照某個(gè)鍵值排序的方法小結(jié)【2種方法】
這篇文章主要介紹了PHP編程實(shí)現(xiàn)多維數(shù)組按照某個(gè)鍵值排序的方法,結(jié)合實(shí)例形式分析了array_multisort和array_sort 2種排序操作方法,需要的朋友可以參考下2017-04-04PHP處理數(shù)組和XML之間的互相轉(zhuǎn)換
這篇文章主要介紹了如何使用PHP處理數(shù)組和XML之間的互相轉(zhuǎn)換,詳細(xì)介紹了PHP將XML轉(zhuǎn)換成數(shù)組,PHP將數(shù)組轉(zhuǎn)換成XML的方法,感興趣的小伙伴們可以參考一下2016-06-06php數(shù)組函數(shù)序列之a(chǎn)rray_keys() - 獲取數(shù)組鍵名
array_keys() 函數(shù)返回包含數(shù)組中所有鍵名的一個(gè)新數(shù)組。如果提供了第二個(gè)參數(shù),則只返回鍵值為該值的鍵名2011-10-10