2015-06-13 120 views
0

有什麼辦法,我可以寫我的代碼是這樣的:設置和使用參數

<?php 

class BaseClass { 
    public $testvar; 

    public function __construct ($testvar) { 
     $this->testvar = $testvar; 
    } 
} 

class ChildClass1 extends BaseClass { 
} 

class ChildClass2 extends BaseClass { 
} 

$bc = new BaseClass('test1'); 
$cc1 = new ChildClass1(); 
$bc->testvar = 'test2'; 
$cc2 = new ChildClass2(); 

echo $cc1->testvar; // should echo 'test1' 
echo $cc2->testvar; // should echo 'test2' 
?> 

我問的原因是,這樣我就不必每次都指定參數我創建一個新的子類。我想這樣做,所以我只需要指定一次參數(最好在創建基類時)。

這可能嗎?

+0

類的每個實例完全相互分離這不是OOP是如何工作的 – Rizier123

回答

0

這就是面向對象編程的要點,每個實例都有自己的參數。

但有時你只想在整個應用程序中使用一次類。就像數據庫控制器或路由器一樣。然後,您可以使用靜態屬性和方法:

class BaseClass { 
    public static $testvar; 

    public function __construct ($testvar) { 
     self::$testvar = $testvar; 
    } 
} 

注意,靜態$testvar的值中的所有對象相同。你可以解決與這樣的事情!」

class BaseClass { 
    public $testvar; 
    public static $test_var; 

    public function __construct ($testvar = '') { 
     if (!empty($testvar)) { 
      self::$test_var = $testvar; 
     } 

     $this->testvar = self::$test_var; 
    } 
} 

class ChildClass1 extends BaseClass { 
} 

class ChildClass2 extends BaseClass { 
} 

$bc = new BaseClass('test1'); 
$cc1 = new ChildClass1(); 
echo $cc1->testvar; // should echo 'test1' 

BaseClass::$test_var = 'test2'; 
$cc2 = new ChildClass2(); 

echo $cc1->testvar; // **should echo 'test1'** 
echo $cc2->testvar; // should echo 'test2' 
+0

你的第二個例子不工作像預期的,因爲你不能聲明一個靜態變量和一個名字相同的實例變量,你將會得到一個「致命錯誤」,第二個問題是你必須在構造函數中聲明$ testvar參數爲可選的,以解決警告 – skroczek

+0

這只是一個例子他如何使用靜態和動態屬性來獲得他想要的東西,但是你是對的,我編輯了我的答案。 – redelschaap