2015-04-01 3 views
1

Я думаю, что я пропустил что-то на OOP с PHP.Повторное использование класса

Я в настоящее время разрабатывает плагин для WordPress, где у меня есть объявление класса для книги:

<?php 
class WPBook{ 
    private $title; 
    function setTitle($_title){ 
     $this->title = $_title; 
    } 
    function getTitle(){ 
     return $this->title; 
    } 
} 
?> 

add_action('hookOne', 'function_do_stuff'); 
add_action('hookAfter_hookOne', 'function_do_more_stuff'); 
function function_do_stuff(){ 

    //some more stuff 
    $newBook = new WPBook; 
    $title = $newBook->setTitle ='titleA'; 
    echo $title; //echos 'titleA'; 
    // function_do_more_stuff($title); does not work because the 
    // function is called on the hookAfter_hookOne 
} 

function function_do_more_stuff(){ 
    // here I want to access the $title from the function_do_stuff(); 
    // but I do not know how. 
} 

Теперь я хочу, чтобы иметь возможность получить доступ к название книги из функции do_stuff() функционировать do_more_stuff().

Проблема в том, что я не могу использовать форму возврата do_stuff() в do_more_stuff(), потому что do_more_stuff() вызывается на крючок действия.

Итак, моя проблема в том, что я не знаю, как получить доступ к названию одного и того же продукта из двух разных функций, передавая одну переменную из одной функции в другую.

+0

Это действительно непонятно, о чем вы спрашиваете, можете ли вы описать проблему немного лучше? – Daan

+0

Можете ли вы дать нам образец кода из двух функций, которые вы упомянули? – Cristik

+0

Я добавил свой пример кода, я надеюсь, что теперь вы можете понять его лучше. – ibsof

ответ

0

Существует что-то неясно в этом вопросе, потому что ваш пример использует пользовательские крючки hookOne и hookAfter_hookOne.

Это важно, потому что, в зависимости от способа вызова крюка, вы сможете использовать свой объект класса в качестве ссылки.

В случае базового звонка <?php do_action('hookAfter_hookOne'); ?> ваш застрявший в данном случае.

Но если хук вызывается с <?php do_action_ref_array('hookAfter_hookOne', array(&$newbook)); ?>see doc. here, то вы можете получить доступ непосредственно объект ссылки, как это:

<?php 

function function_do_more_stuff(&$newbook){ 
    newbook->setTitle ='titleB'; 
} 

Другой способ глобализовать объект вне функций, но это, возможно, не ожидаемый эффект ,

Надеюсь, это поможет.

Смежные вопросы