Akshit Gupta Ответов: 2

Инициализация конструктора Php


У меня есть сомнения в инициализации класса Php.. Как и в Java, экземпляр класса вызывает конструктор родительских классов для инициализации родительских классов, чтобы иметь возможность использовать их свойства, PHP не требует от нас вызова конструктора родительского класса, чтобы иметь возможность использовать его свойства и метод. Как в коде :
class Mammal{
    protected $name = "Hey";
    function __construct(){
        echo "Class of Mammals";
     }
}
class Dog extends Mammal{
    public $ecolor = "Black";
    public $fcolor = "White";
    public $nose = "Sharp";
    function __construct(){
        echo "Lovely Dog <br>";
        echo $this->name . "<br>"; // can call name without parent::__construct()
}
    function showAll(){
        echo "Eye Color : " . $this->ecolor . " fcolor : " . $this->fcolor . " nose : " . $this->nose;
    }
}
Как мы можем вызвать переменную $name млекопитающего, не инициализируя ее с помощью конструктора?

Что я уже пробовал:

Инициализация родительского конструктора PHP

2 Ответов

Рейтинг:
1

Jochen Arndt

Цитата:
Как и в Java, экземпляр класса вызывает конструктор родительских классов для инициализации родительских классов, чтобы иметь возможность использовать их свойства
Это не верно для PHP при определении конструктора в производном классе:
Примечание: Родительские конструкторы не вызываются неявно, если дочерний класс определяет конструктор. Чтобы запустить родительский конструктор, вызов parent::__construct() внутри конструктора класса-потомка. Если дочерний элемент не определяет конструктор, то он может быть унаследован от родительского класса точно так же, как обычный метод класса (если он не был объявлен как частный).

Ваш $name переменная-член класса (называемая свойством в PHP) инициализируется не конструктором, а при создании объекта.

В PHP каждое свойство класса инициализируется значением по умолчанию (обычно nullЗначение по умолчанию можно изменить, как это делается в вашем коде, назначив значение константы времени компиляции.

При создании экземпляра объекта PHP сначала выделяется необходимая память. Затем все свойства (включая свойства родительских классов) инициализируются их значениями по умолчанию (которые могут быть установлены с помощью инициализации с объявлением). Наконец, конструктор вызывается, если он присутствует.


Рейтинг:
1

muhammad sufiyan

<?php
class BaseClass {
    function __construct() {
        print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    function __construct() {
        parent::__construct();
        print "In SubClass constructor\n";
    }
}

class OtherSubClass extends BaseClass {
    // inherits BaseClass's constructor
}

// In BaseClass constructor
$obj = new BaseClass();

// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();

// In BaseClass constructor
$obj = new OtherSubClass();
?>