2016-05-16 4 views
3

Я пишу этот простой код и не знает, что проблема с конструктором:Как инициализировать переменный в конструкторе в PHP

class Animal { 
    public $_type; 
    public $_breed; 

    public function __construct ($t, $b) { 
     echo "i have initialized<br/>"; 

     $this ->_type = $t; 
     $this ->_breed = $b; 
     echo "type is " .$_type. "<br/>"; 

     echo "breed is " .$_breed. "<br/>"; 
    } 

    public function __destruct() { 
     echo "i am dying"; 
    } 
} 

$dog = new Animal("Dog", "Pug"); 
+1

Итак, с какими проблемами вы сталкиваетесь? – Ali

+1

Вы должны получить доступ к таким переменным, как этот '$ this -> _ type', делая эхо внутри конструктора. – prava

+0

использовать в echo $ this -> _ порождать как в то время как init – splash58

ответ

2

Попробуйте (обратите внимание на эхо-линии):

class Animal { 
    public $_type; 
    public $_breed; 

    public function __construct ($t, $b) { 
     echo "i have initialized<br/>"; 

     $this->_type = $t; 
     $this->_breed = $b; 

     //You have to use '$this' keyword to access 
     //class attibutes: 
     echo "type is " . $this->_type . "<br/>"; 
     echo "breed is " . $this->_breed . "<br/>"; 
    } 

    public function __destruct() { 
     echo "i am dying"; 
    } 
} 
+3

Объясните, почему он не работает и что вы сделали, чтобы заставить его работать. –

+0

@ SverriM.Olsen, я добавил свой комментарий сначала для вопроса OP. Надеюсь, что это возможно.Но, в любом случае спасибо, что сообщили мне: – prava

+4

Ответы должны стоять в одиночестве. Вам не нужно будет искать комментарии в других местах, чтобы выяснить, что происходит. Потребуется примерно столько же времени, чтобы добавить его к вопросу, поскольку он заставил вас ответить мне. –

4

Почему у вас есть пробел после $this? Удалите пространство.
Кроме того, при вызове переменной добавьте $this.

class Animal { 
    public $_type; 
    public $_breed; 

    public function __construct ($t, $b) { 
     echo "i have initialized<br/>"; 

     $this->_type = $t; // <-- remove space 
     $this->_breed = $b; // <-- remove space 
     echo "type is " .$this->_type. "<br/>"; // <-- add $this 

     echo "breed is " .$this->_breed. "<br/>"; // <-- add $this 
    } 

    public function __destruct() { 
     echo "i am dying"; 
    } 
} 
+1

не имеет значения, если пробел после $ this –

+0

вы можете объяснить, почему удалить пространство после '$ this', потому что некоторое время у меня также есть пробел в коде после $ this, но я не сталкивался с какой-либо проблемой –

+0

Нет, это еще не все печатать значение переменной –

1

$ _type и $ _breed является переменной класса, так что вам нужно использовать с помощью this ключевого слова

echo "type is " .$this->_type. "<br/>"; 
    echo "breed is " .$this->_breed. "<br/>"; 
3

Вы инициализацией их штраф, но изъятие их неправильное ...

С $_type и $_breed находятся в области видимости на уровне объекта, вы должны указать PHP, какой размах вы ссылки на них в.

Поэтому вместо

echo $_breed; 

Вам нужно

echo $this->_breed; 

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

1

Хотя это не нарушает синтаксис PHP, я полагаю, что эти две строчки

echo "type is " .$dog->_type. "<br/>"; 
echo "breed is " .$dog->_breed. "<br/>"; 

не должен быть помещен в __construct() использовать вместо этого вне класса,

Подобно этому,

class Animal { 
    public $_type; 
    public $_breed; 

    public function __construct ($t, $b) { 
    $this ->_type = $t; 
    $this ->_breed = $b; 
    } 
    public function __destruct() { 
     echo "i am dying"; 
    } 
} 

$dog = new Animal("Dog", "Pug"); 
echo "i have initialized<br/>"; 
echo "type is " .$dog->_type. "<br/>"; 
echo "breed is " .$dog->_breed. "<br/>"; 
+0

ok спасибо fil –

+0

Я до вас, если вы его проголосуете – Fil

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