php基礎知識:類與對象(1)

來源:互聯網
上載者:User

類的定義:
以關鍵字 class 開頭,後面跟著類名,可以是任何非 PHP 保留字的名字。後面跟著一對花括弧,裡麵包含有類成員和方法的定義。

偽變數$this
可以在當一個方法在對象內部調用時使用。$this 是一個到調用對象(通常是方法所屬於的對象,但也可以是另一個對象,如果該方法是從第二個對象內靜態調用的話)的引用。
//??靜態調用的內部到底是怎樣的?
看個例子:
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();
輸出結果為:
$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
/*我希望知道這個例子的記憶體等的具體實現,我暫時無法理解。如果有人可以講清楚,可以告訴我。我們宿舍牛頭現在正在冬眠,等他醒來,我會問。*/

new
要建立一個對象的執行個體,必須建立一個新對象並將其賦給一個變數。當建立新對象時該對象總是被賦值,除非該對象定義了建構函式並且在出錯時拋出了一個異常。
當把一個對象已經建立的執行個體賦給一個新變數時,新變數會訪問同一個執行個體,就和用該對象賦值一樣。此行為和給函數傳遞入執行個體時一樣。可以用複製給一個已建立的對象建立一個新執行個體。
(這幾句話雖然很短,但是未必容易理解。)
例子如下:
class SimpleClass
{
// 成員聲明
public $var = 'a default value';

// 方法聲明
public function displayVar() {
echo $this->var;
}
}
//看下面的圖.1>new 在heap(堆)中執行個體化一個對象。2>將指標$instance指向他
$instance = new SimpleClass();
//3>將指標$assigned指向heap中的執行個體化對象
$assigned = $instance;
//4>將$instance的引用(地址)賦值給$reference
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // 5>間斷$instance與heap中執行個體的串連。
var_dump($instance);
var_dump($reference);
var_dump($assigned);
輸出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
圖示整個過程:

類繼承extends
一個類可以在聲明中用 extends 關鍵字繼承另一個類的方法和成員。不能擴充多個類,只能繼承一個基類。

被繼承的方法和成員可以通過用同樣的名字重新聲明被覆蓋,除非父類定義方法時使用了 final 關鍵字。可以通過 parent:: 來訪問被覆蓋的方法或成員。(繼承的機制到底怎樣的?)
原始碼如下:
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.