2012-03-05 45 views
1

我們有兩個A級& B:如何訪問一個繼承我們調用的php類的變量?

class A{ 
var $settings; 
function getinfo(){ 
    $settings['domain']="mydomain"; 
    $settings['pass']="1234"; 
    return $settings; 
} 
} 

class B extends A{ 
$ads = A::getinfo(); 
function makeurl(){ 
    return "template/".$ads['domain']; 
} 
} 

現在我有B的例子在我的網頁,但我需要「通行證」,也許有些代碼:

$theme=new B(); 
$mypass = $theme->A->getinfo; 
echo $mypass[$pass]; 

我知道這段代碼充滿了錯誤,但我無法寫出更好的代碼。有沒有任何解決方案來訪問密碼而不需要創建A的實例?

回答

2

是的。它是如此簡單:

$theme = new B(); 
$mypass = $theme->getinfo(); 
echo $mypass['pass']; 

您還可以改善你的班位:

class A 
{ 
    var $settings; 
    function getinfo() 
    { 
     $this->settings['domain'] = "mydomain"; 
     $this->settings['pass'] = "1234"; 
     return $this->settings; 
    } 
} 

class B extends A 
{ 
    function makeurl() 
    { 
     $this->getinfo(); 
     return 'template/' . $this->settings['domain']; 
    } 
} 
1

爲什麼不從B實例調用中的變量的設置,因爲B是A的子類?

1

如果我理解正確的話,你很接近:

$theme=new B(); 
$settings = $theme->getinfo(); 
$mypass = $settings['pass']; 
echo $mypass; 
+0

你對,謝謝。 – Phil 2012-03-05 15:06:29

+0

NP。 :)確實,他很接近。 – 2012-03-05 15:09:58

1

如果B擴展A,A的所有protected和public成員繼承到B,這樣你就可以直接訪問它們。

class A { 
    protected $foo; 

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

class B extends A { 
    public function bar() { 
    echo $this->foo; 
    } 
} 


$b = B(); 
$b->bar(); 
+0

是啊,我現在主要是寫python,這個滑倒:)謝謝 – 2012-03-05 15:03:39

+0

NP。 :)我認爲OP需要一個很好的教程來學習基礎知識......可見性/範圍適用於課程2,IMO – 2012-03-05 15:12:21

1

試試這個代碼:

<?php 
class A 
{ 
    var $settings; 

    function getinfo() 
    { 
     $settings['domain'] = "mydomain"; 
     $settings['pass'] = "1234"; 
     return $settings; 
    } 
} 

class B extends A 
{ 
    function makeurl() 
    { 
     $ads = $this->getinfo(); 
     return "template/" . $ads['domain']; 
    } 
} 

$theme=new B(); 
$mypass = $theme->getinfo(); 
echo $mypass['pass']; 
1

有關在使設置的公共靜態變量是什麼?通過使其成爲一個類變量,你不會需要A.實例

class A { 
    public static $settings; 
    // getter and setter methods here 
} 

// code elsewhere 
echo A::$settings['pass']; 

也因爲你的B類延伸的它繼承的方法和屬性,所以你可以調用

$theme = new B(); 
$mySettings = $theme->GetInfo(); 
+0

OP似乎在學習基礎知識。這應該在第2課......海事組織 – 2012-03-05 15:04:03