在回顧一些PHP代碼時,我發現了一件奇怪的事情。下面是它的簡單的例子說明:PHP繼承,使用子變量的父函數
文件a.php只會:
<?php
class A{
public function methodA(){
echo $this->B;
}
}
?>
文件B.php:
<?php
class B extends A{
public $B = "It's working!";
}
?>
文件test.php的:
<?php
require_once("A.php");
require_once("B.php");
$b = new B();
$b->methodA();
?>
運行test.php輸出「It's working!」,但問題是爲什麼它工作? :)這是一個功能還是錯誤?類A中的方法methodA也可以調用B類中不應該在OOP中工作的方法。
一種方式來測試是創建一個「C」類沒有定義B,看看會發生什麼。儘管如果沒有進行實驗,你所做的將被認爲是瘋狂的設計,但PHP可能足夠聰明以使其能夠在這種情況下工作。 – 2012-03-15 19:51:27
OOP沒有提到調用子類方法是否應該從基類工作。它表示超類方法應該可用於子類(除非被覆蓋),如果有的話......但對於其他方式而言卻相當沉默。實際上,一些最純粹的OOP語言並不在乎。 – cHao 2012-03-15 19:52:13
5 + upvotes?怎麼來的? – 2012-03-15 19:53:08