Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Указатель this (https://javascript.ru/forum/server/13204-ukazatel.html)

Golovastik 20.11.2010 00:05

Указатель this
 
Написал для теста простой код, он хоть и выводит цифру 7, но выводит перед этой цифрой ошибку, почему так?
Код:

class A{
var $x1, $x2;
function setname(){
echo $this->$x1 = 7;

}
}
$object = new A;
$object->setname();

: Undefined variable: x1 in......

Но я же инициализировал свойство x1, почему ошибка?

Gozar 20.11.2010 01:11

удалено.

Gvozd 20.11.2010 01:46

судя по всем на PHP
и ошибка в том, что к свойствам надо обращаться так:
$this->x1

а не как вы .

хотя ваш способ записи ИНОГДА, очень редко также применим.
следующая запись означает
$this->$x1

1)взять ЛОКАЛЬНУЮ переменную $x1(ваш код выдает ошибку в этот момент, так как перменная не существует)
2)привести эту переменную к строке(несуществующая переменная приводится к пустой строке)
3)взять свойство объекта, имеющее полученное из строки имя(в данном случае свойство с пустым именем. но такие свойства недопустимы,и выпадает Fatal error)

пример на понимание:
<?php
class A{
var $x1, $x2;
function setname(){
$x1 = 'x2';
$this->x1 = 1;//записывает в $this->x1
$this->$x1 = 2;//записывает в $this->x2, так как $x1 = 'x2';
$this->{$x1} = 2;//ТО же самое, что и перед этим, но более универсальная запись
$this->{"x2"} = 2;//и еще один способ записи
$this->{"x".(2)} = 2;//и еще один способ записи
echo $this->x1.'<br />';
echo $this->x2.'<br />';

}
}
$object = new A;
$object->setname();


Часовой пояс GMT +3, время: 11:22.