2014-02-28 52 views
2

我無法掌握這個概念。我想在擴展類中的父類中使用一個簡單的變量。這個變量很靈活,可以在父類的一個Method中的某處進行計算。PHP使用擴展類中的父變量

class Class1 { 
    public $owner; 

    function set_owner() { 
     $this->owner = "Me"; 
     return $this->owner; 
    } 
} 

class Class2 extends Class1 { 

    function show_owner() { 
     return $this->owner; 
    } 
} 

$Class1 = new Class1(); 
$Class2 = new Class2(); 

echo "<p>owner set: ".$Class1->set_owner()."</p>"; 
echo "<p>owner get: ".$Class2->show_owner()."</p>"; 

回答

2

必須使用static像這樣:

class Class1 { 
    public static $owner; 

    function set_owner() { 
     self::$owner = "Me"; 
     return self::$owner; 
    } 
} 

class Class2 extends Class1 { 

    function show_owner() { 
     return self::$owner; 
    } 
} 

$Class1 = new Class1(); 
$Class2 = new Class2(); 

echo "<p>owner set: ".$Class1->set_owner()."</p>"; 
echo "<p>owner get: ".$Class2->show_owner()."</p>"; 

輸出:

owner set: Me 

owner get: Me 
+0

會做'return $ this-> owner;'在班級2工作嗎? @ShlomoGoldstein – KDOT

1

你有2個不同的對象。

您可以使用相同的對象是這樣的:

$Class2 = new Class2(); 

echo "<p>owner set: ".$Class2->set_owner()."</p>"; 
echo "<p>owner get: ".$Class2->show_owner()."</p>"; 

或者,如果你想有2個對象,你也可以使用靜態屬性(但它是不好的做法,很難測試)。

1

$Class1是一個不同的對象& $Class2是不同的對象,因此$owner變量是兩者

不同

你在做什麼是

 echo "<p>owner set: ".$Class1->set_owner()."</p>"; //set the owner variable of Class1 
     echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2 , $owner is different for Class2 

這將打印所需

 echo "<p>owner set: ".$Class2->set_owner()."</p>"; //set the owner variable of Class2 
     echo "<p>owner get: ".$Class2->show_owner()."</p>"; // get the owner variable of Class2 
1

記住類!=對象是什麼。 Class2繼承形式Class1,但class1對象爲變量設置一個值,而class2對象不會從class1對象繼承。但是您可以將$ owner屬性設置爲靜態以實現此目的。

演示:https://eval.in/106931

0

您的問題不清楚。儘管我會盡我所能!

當你繼承你的父類(Class1)publicprotectedpropertiesmethods可以使用或過度纏身的child類。

所有者變量是可見的,可以被子類使用。但由於這種說法,它在不同的namespace中:$Class2 = new Class2();

調用echo var_dump($Class2->show_owner());顯示NULL數據類型。