Наследование в PHP

Компьютеры программирование php ООП

Есть простой пример:

<?php

class A
{
protected $version;

function A()
{
$version = "1.1.1";
$a = new B();
}
}

class B extends A
{
function B()
{
echo "\nversion =" . $this->version;
}
}


$x = new A();

?>

Почему в конструкторе класса B не видно значения переменной version класса A?

Спасибо

Примечание:
В классе B объявление
protected $version
не помогает

Примечание:
Версия:
PHP 5.3.6-13ubuntu3.6 with Suhosin-Patch (cli) (built: Feb 11 2012 02:17:16)

Переделал используя "__construct". Доступа к protected-данным в потомках добиться не могу:

При выводе в потомке значение "$this->version" оказывается пустым

class A
{
protected $version;

function __construct()
{
$this->version = "1.1.1";
$a = new B();
}
}

class B extends A
{

function __construct()
{
echo "\nversion =" . $this->version; //При выводе значение "$this->version" оказывается пустым
}
}

Примечание:
2 HeX-1983 (hex hex):
Очевидно, что если создать объект класса А, то скрипт впадет в бесконечный цикл
Ответы:
class B extends A
{
protected $version;
function B()
{
echo "\nversion =" . $this->version;
}
}
Для доступа к свойствам объекта в PHP всегда используется $this->
class A
{
protected $version;
тогда бы сделал так
Вы конструируете первый объект класса А в глобальном контексте, при это вызываете в конструкторе Класса А создание другого, локального, объекта класса Б, который наследник от А, но в конструкторе класса Б нет вызова конструктора родительского класса - именно по этому нет значения в поле  $this->version. Но если вы сделаете этот вызов, то произойдет бесконечная рекурсия и получите переполнение стека.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.