2012-05-05 3 views
0

Я новичок в php, поэтому вопрос - это свалка. Взгляните на следующий кодинициализация поля класса с объектом

class A { 
    private $obj; 

    public function A() { 
     $this->obj = new Obj(); 
     //$this->obj->fff() works here; 
     //still var_dump($this->obj) prints NULL here 
    } 

    public f() { 
     //$this->obj is NULL here!!! 
     //$this->obj->ff() throws an error 
    } 
} 

UPD в f() я Fatal error: Call to a member function ff() on a non-object in ...

как я должен инициализировать $obj, чтобы увидеть его в f()?

Благодарим вас заранее!

+1

Это зависит от того, что находится внутри f(). иногда инициализация с помощью простого нового оператора для построения объекта может завершиться неудачей, например, при клонировании. –

ответ

3

Попробуйте следующее:

public function __construct() { 
    $this->obj = new Obj(); 
} 

Я думаю, что проблема вы пропустили function. Я действительно не парень PHP, но я думаю, что public function A() тоже будет работать, но предпочтительнее __construct.

Редактировать: теперь вы добавили function. Я не совсем уверен, что тогда мой ответ вам поможет.

+0

Да, я пропустил 'function' при отправке вопроса. К сожалению, '__construct()' не помогает. В любом случае спасибо за ответ! – Eugeny89

+0

Тогда, может быть, 'новый Obj()' не работает. Что внутри его конструктора? –

+0

Также это 'public f()' действительно или 'public function f()'? –

1

У вас есть ошибка в имени функции A(), которая похожа на имя класса. Когда вы вызываете $a = new A;, фактически вызывается метод A() класса A. Вместо этого используйте __construct().

На моем сервере это работает отлично:

<?php 

class A { 

    private $obj; 

    public function A() { 

     $this->obj = new stdClass(); 

    } 

    public function f() { 

     var_dump($this->obj); 

    } 

} 

$aa = new A; 

$aa->f(); // Prints `object(stdClass)#2 (0) { }` 

?> 

Похоже, у вас есть проблемы с вашим Obj класса. И почему бы вам не поместить function в public f() { в определение вашего класса?

+0

Изменение 'A()' с конструкцией, похоже, не помогает. Обновлен вопрос – Eugeny89

+0

Посмотрите обновленный ответ. Постскриптум А русский тут видно?) –

+0

Спасибо! Конечно видно !!! – Eugeny89

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