2016-02-18 36 views
0

我有下面的代碼,在一個類內部執行一個全局函數來填充wordpress的函數,問題是我能得到一個變量公共類的唯一方法如下PHP函數裏面另一個函數[class]

class Core { 
public $notice; 
function __construct(){ 
    $this->core_function(); 

} 
function core_function(){ 
    global $globalvar; 
    $globalvar = $this; 
    function notice_global(){ 
    global $globalvar; 

    return $globalvar->notice; 

    } 
} 
function set_notice(){ 
    $this->notice = array('Warning'); 
} 

} 

$GP = new Core(); 
$GP->set_notice(); 
var_dump(notice_global()); 

任何其他的想法或建議,這段代碼是否正確?

+0

你問過之前試過了嗎? 'var_dupm()'不存在。 – fusion3k

+1

@ fusion3k這只是一個錯字。 @OP爲什麼不是'$ GP-> notice'?這是一個公共變量。 –

+0

正如@Flyer所說,你可以直接調用'$ GP-> notice'並刪除'__construnc','core_function'和'notice_global'。調用'notice_global()'而不是'$ GP-> notice'有一個特別的原因。 – fusion3k

回答

1

正如你在評論中所說的,你需要全局函數,因爲wordpress鉤子方法(對於插件,我想)。

這不是必須的:有一種方法可以將對象方法(而不是整個對象)傳遞給wordpress。

你可以這樣試試:

class Core { 
    public $notice; 

    function get_notice() 
    { return $this->notice; } 

    function set_notice() 
    { $this->notice = array('Warning'); } 
} 

$GP = new Core(); 
$GP->set_notice(); 

add_action('save_post', array($GP, 'get_notice')); 

或者 - 一個更好的靈活性 - 以這樣的方式

class Core { 
    public $notice; 

    function get_notice() 
    { return $this->notice; } 

    function set_notice() 
    { $this->notice = array('Warning'); } 

    function add_wp_action($hook, $method) 
    { add_action($hook, array($this, $method)); } 
} 

$GP = new Core(); 
$GP->set_notice(); 

$GP->add_wp_action('save_post', 'get_notice'); 

通過這種方式,你可以直接設置在所有的WP掛鉤類,並直接使用對象方法調用它們,而不使用全局變量或函數技巧。

0

我不知道我是否理解你,但是notice_global可以從這個類中移出。

全局變量的範圍超出範圍

+0

明確的想法是遷出全球使用,因爲我想在不創建新實例的情況下使用WordPress的功能,主要問題是這是否會導致過載或不正確地採取此 –

0

不需要這些功能。您已將$notice定義爲公共財產。你可以像這樣訪問它:$GP->notice;

您可能還想閱讀documentation關於方法和屬性的可見性。