Видимость переменных в классе

Tapo4ek

Новичок
Видимость переменных в классе

День добрый.

Есть класс родитель "MyClass", есть потомок "MyClass2 extends MyClass".
В конструкторе родительского классе идет определение переменной "$public" после этого идет вызов функции "a1()".
В функции "a1()" происходит присоединение файла с классом потомка.
В конструкторе класса потомка идет вызов функции "а2()".
В функции "а2()" выводим переменную "$public".

Проблема: при выводе переменной из-под класса потомка, переменная не изменяться.
var_dump($obj)
object(MyClass)#1 (1) { ["public"]=> string(1) "b" }
var_dump($obj2)
object(MyClass2)#2 (1) { ["public"]=> string(1) "a" }

Что я делаю не так?

Код:

1.php
PHP:
<?php
class MyClass
{
    public $public = 'a';
	
	function __construct() {
	 	$this->public = 'b';
		$this-> a1();
	}

    function a1()
    {    
		require_once('2.php');
    }
}

$obj = new MyClass();
?>
2.php
PHP:
<?
class MyClass2 extends MyClass
{

	function __construct() {
		$this-> a2();
	}
	
    function a2()
    {
        echo $this->public;

    }
}

$obj2 = new MyClass2();
?>
 

Adelf

Administrator
Команда форума
подсказка: из конструктора потомка принято вызывать конструктор родителя. parent::__construct
 

Tapo4ek

Новичок
Автор оригинала: Lightning
Так ты ж ее и не меняешь.
Хм?

PHP:
$this->public = 'b';
Автор оригинала: Adelf
подсказка: из конструктора потомка принято вызывать конструктор родителя. parent::__construct
Большое спасибо!
Проблема решена.
 

Tapo4ek

Новичок
Автор оригинала: triumvirat
не имеет смысла
Согласен.

Хоть и проблема решена, но все равно не понял почему именно так.

Мануал: Ключевое слово extends говорит о том, что создаваемый класс является лишь "расширением" класса A, и не более того. То есть B содержит те же самые свойства и методы , что и A, но, помимо них и еще некоторые дополнительные, "свои".

Как я понимаю все переменные тоже должны "уходить" в класс потомок?
В классе родителе объявляются переменные и с ними происходят какие-то изменения, класс потомок садиться в область родительского класса, где ему доступны уже измененные значения переменных.

Где в своих рассуждениях я не прав?
 

dimagolov

Новичок
Tapo4ek, а ты подумай, что ты поменял, чтобы заработало так, как ты хотел. наличия методов предка мало, надо чтобы они выполнялись, чего в твоем случае не происходило.
 

Tapo4ek

Новичок
Автор оригинала: dimagolov
Tapo4ek, а ты подумай, что ты поменял, чтобы заработало так, как ты хотел. наличия методов предка мало, надо чтобы они выполнялись, чего в твоем случае не происходило.
Пока писал 10 метровый ответ, разобрался.
Спасибо!
 
Сверху