2014-03-24 216 views
2

我認爲這是非常基本的功能,請大家幫忙。 如何在PHP中將靜態方法調用非靜態方法。從靜態方法調用非靜態方法

class Country { 
    public function getCountries() { 
     return 'countries'; 
    } 

    public static function countriesDropdown() { 
     $this->getCountries(); 
    } 
} 
+0

但是,爲什麼'getCountries'也不是一個靜態方法,因爲它根本不使用'$ this'? – SirDarius

回答

5

首選方式..

這是更好地使getCountries()方法靜態代替。

<?php 

class Country { 
    public static function getCountries() { 
     return 'countries'; 
    } 

    public static function countriesDropdown() { 
     return self::getCountries(); 
    } 
} 
$c = new Country(); 
echo $c::countriesDropdown(); //"prints" countries 

添加self關鍵字顯示PHP嚴格標準的通知避免你可以創建非常相同的類的對象實例,並調用與它相關的方法。

從一個靜態方法調用非靜態方法

<?php 

class Country { 
    public function getCountries() { 
     return 'countries'; 
    } 

    public static function countriesDropdown() { 
     $c = new Country(); 
     return $c->getCountries(); 
    } 
} 

$c = new Country(); 
echo $c::countriesDropdown(); //"prints" countries 
+2

是的,你是對的,但有一個警告嚴格的標準:非靜態方法國家:: getCountries()不應該靜態調用 – zarpio

+0

對不起,我不在了..爲了避免你可以創建一個實例內的靜態函數同班同學。 –

+0

@zarpio,我只是想知道爲什麼不讓getCountries()方法變成靜態的呢?所以你沒有經歷所有這些障礙;) –

1

你甚至可以使用Class Name

public static function countriesDropdown() { 
    echo Country::getCountries(); 
} 
+0

是的,你是對的,但有警告嚴格的標準:非靜態方法國家:: getCountries()不應該靜態調用 – zarpio

1

你不能簡單的做了,你需要創建類&有一個實例撥打非靜電方式,

class Country { 
    public function getCountries() { 
     return 'countries'; 
    } 

    public static function countriesDropdown() { 
     $country = new Country(); 
     return $country->getCountries(); 
    } 
} 

DEMO

相關問題