проблема в конструкторе

juk

Новичок
проблема в конструкторе

решил проверить работают-ли классы в PHP 4.2.1 и столкнулся с такой проблемой:

class CYo
{
var $var1;
var $var2;
var $var3;

function CYo()
{
$this->$var1 = 1;
$this->$var2 = 2;
$this->$var3 = 3;

echo "CYo::CYo<br>" . $this->$var1 . "<br>" . $this->$var2 . "<br>" . $this->$var3 . "<br>";
}
}

$yo = new CYo;

в итоге выводится:

CYo::CYo
3
3
3

т.е. всем мемберам присваивается одно и то же значение.

почему????
 

Solid

Drosera anglica
Мама дорогая... замени $this->$var1 - $this->var1; и всё будет работать. Тут дело не в версии PHP, а в.. ладно, не буду.

-~{}~ 03.02.06 12:29:

При чём здесь конструктор - не понятно. :)
 

juk

Новичок
спасибо за ответ - простая синтаксическая ошибка,
но почему интерпретатор про нее промолчал, это тоже непонятно......
 

Solid

Drosera anglica
Странно что промолчал... error_reporting(E_ALL); ?
У меня:
C:\Documents and Settings\Dmitry\Desktop>php zz.php
PHP Notice: Undefined variable: var1 in C:\Documents and Settings\Dmitry\Desktop\zz.php on line 10
PHP Fatal error: Cannot access empty property in C:\Documents and Settings\Dmitry\Desktop\zz.php on line 10
 

[Gisma]

Новичок
ну да не синтаксическая, а еще ответьте пожалуйста на мой глупый вопрос, как такой тип ошибок называется, "логическая времени исполнения"
Терминологию нужно знать!:)
 

svetasmirnova

маленький монстрик
Кстати интересный вопрос. Возьмём строчку
$this->$var1 = 1;
$var1 в этом месте не определена, поэтому Solid получил Notice. У автора Notices скорее всего отключены. Но при возникновении ошибки уровня Notice $var1 присваивается значение null и программа продолжает работать дальше, если не назначен собственый обработчик ошибки уровня Notice. То же самое и по остальным строчкам. Т.е. автор почти корректно присвоил члену класса с именем null значение 3.
 

Solid

Drosera anglica
svetasmirnova
Fatal error совсем не видем?
У меня версия 5, а у него 4... по-этому и ошибки нет. :D
 

svetasmirnova

маленький монстрик
>php.exe" -v
PHP 4.4.3-dev (cgi-fcgi) (built: Jan 18 2006 14:17:28)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with Xdebug v2.0.0rc1-dev, Copyright (c) 2002, 2003, 2004, 2005, 2006, by Derick Rethans

>"c:\Program Files\php\php4\cli\php.exe" -r "class A{}
$a = new A; $a->$b = 3; var_dump($a->$b);"

Notice: Undefined variable: b in Command line code on line 1

Call Stack:
0.0209 1. {main}() Command line code:0

Notice: Undefined variable: b in Command line code on line 1

Call Stack:
0.0209 1. {main}() Command line code:0
int(3)
Да, версия имеет значение.
 
Сверху