2012-05-11 4 views
1

Я новичок в PHP OOP, и у меня возникла проблема с возвратом массивов.PHP OOP и массивы

class example 
{ 
    public $array; 

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

    } 

    public function do_work() 
    { 
     $this->array[] = 'test'; 
    } 
} 
$test = new example(); 
$test->do_work(); 
$test->array; 

Я продолжаю получать пустой массив вместо «теста». Что я делаю неправильно?

+0

Новый пример() создаст объект с массивом, а массив $ test-> будет технически разрешать вам доступ к массиву, но если вы не вызываете $ test -> do_work(); массив не будет содержать ничего. – EmmanuelG

+1

Возможно, вы хотели вызвать do_work() в конструкторе? Кроме того, никогда не рекомендуется использовать защищенные ключевые слова для имен переменных. – Ansari

+0

@ Ансари: Я не согласен с обоими вашими заявлениями. Пожалуйста, объясните. –

ответ

5

Это потому, что вы никогда не вызываете функцию $test->do_work(); Конструктор просто создает пустой массив, а затем вы пытаетесь получить доступ к свойству. Это должно быть быть пустым.

Обновления

Я вижу, что вы обновили свой вопрос. Если вы просто echo $test->array, он должен просто распечатать Array. Тем не менее, когда я скопировать обновленный код и выполнить var_dump($test->array), это выход я получаю:

array(1) { [0]=> string(4) "test" } 

Какой я считаю, что вы ожидаете. Однако код, который у вас есть в вашем вопросе, не должен выводить ничего. Вы ничего не делаете с $test->array, переменная оценивается и затем отбрасывается.

+3

Обратите внимание, что в исходном ответе у ОП не было '$ test-> do_work()' в его коде. Это не показано из-за периода отмены редактирования. –

+0

@Truth спасибо, обновил мой ответ. –

+0

Да, ваше право. Благодаря! –

4

Ваше последнее заявление, $test->array; на самом деле ничего не делает. Я предполагаю, что вы используете что-то вроде echo. Ваш код должен выводить массив, если вы используете, например, var_dump, see the example on codepad