LINUX.ORG.RU

[PHP] переменные в абстрактном классе

 


0

1

С PHP фактически не знаком. Есть такой вот кусочек кода:


abstract class class1
{
    protected	$_addr;
}

class class2 extends class1
{
    function	__construct()
    {
	$this->$_addr = "Goodbye, world";
    }
}

$test = new class2();

И в результате я получаю ошибку:

PHP Notice:  Undefined variable: _addr in /home/astahl/work/alltorrs.net/lib/parsers/test.php on line 13
PHP Fatal error:  Cannot access empty property in /home/astahl/work/alltorrs.net/lib/parsers/test.php on line 13

Подскажите что не так?

★★☆
Ответ на: комментарий от matvei

Разобрался.

Можно, но управлять такими переменными необходимо через «сеттеры».

Такой код не ругается:

<?php
abstract class class1
{
    private	$_addr;
	
	
	abstract	function	__construct();
	function setAddr($addr)
	{
		$_addr = $addr;
	}

}

class class2 extends class1
{
    function	__construct()
    {
	$this->setAddr("Goodbye, world");
    }
}

$test = new class2();
?>

Stahl ★★☆
() автор топика
Ответ на: комментарий от matvei

Хм, а похоже ты был прав.
Ругаться-то не ругается, но и не работает.

Stahl ★★☆
() автор топика

В первом примере вместо:

function	__construct()
{
    $this->$_addr = "Goodbye, world";
}

надо

function	__construct()
{
    $this->_addr = "Goodbye, world";
}

impr
()
Ответ на: комментарий от impr

Офигеть! Спасибо тебе огромное!

Stahl ★★☆
() автор топика

$this->$_addr = «Goodbye, world»; используется тогда, когда $_addr переменная. Например:

$_addr = 'message';
$this->$_addr = "Goodbye, world";
#что равно
$this->message = "Goodbye, world";

impr
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.