Я пытаюсь автоматизировать проверку формы и процесс вставки db. В определенной части мне нужно иметь доступ к родительскому классу из дочернего класса. Чтобы быть точным, мне нужно получить доступ к родительскому классу для доступа к другому дочернему классу.Как получить доступ к родительскому классу из дочернего класса?
Я попытался повторить ту же структуру, я использую в реальном коде:
class Family {
public function __construct($members = []) {
foreach ($members as $member) {
$this->$member[0] = new Member($member);
}
}
}
class Member {
public $name;
public $niisan;
public function __construct($name = []) {
$this->name = $name[0];
if (count($name) > 1) {
$this->get_niisan($name[1]);
}
}
public function get_niisan($member_lookup) {
$this->niisan = $this->name . " has a niisan named X";
}
}
$Winchesters = new Family([
["Dean"],
["Sam", "Dean"],
]);
Выход:
object(Family)#1 (2) {
["Dean"] => object(Member)#2 (2) {
["name"] => "Dean"
["niisan"] => NULL
}
["Sam"] => object(Member)#3 (2) {
["name"] => "Sam"
["niisan"] => "Sam has a niisan named X"
}
}
То, что я хочу сделать, это создать два подкласса в основной класс. Важен порядок создания подклассов. ["Sam"]
зависит от ["Dean"]
, поэтому ["Dean"]
необходимо создать в первую очередь. Некоторые из свойств ["Dean"]
будут использованы в ["Sam"]
.
В JavaScript, я бы написал так:
function Family(members) {
var parent = this; // Family object
for (var i = 0; i < members.length; i++) {
// passing a reference of Family to the new Member object
// so that it can access the main object later
this[members[i][0]] = new Member(parent, members[i]);
}
}
function Member(parent, name) {
// saving the reference to the parent object
this.parent = parent;
this.name = name[0];
this.niisan = "";
this.get_niisan = function (lookup) {
// accessing the parent object and then getting the name property of "Dean" object
this.niisan = this.name + " has a niisan named " + this.parent[lookup].name;
};
if (name.length > 1) {
this.get_niisan(name[1]);
}
}
var Winchesters = new Family([
["Dean"],
["Sam", "Dean"]
]);
Передача основной объект каждого суб-объекта. PHP должен иметь свой собственный способ справиться с этим. Я просто этого не знаю.
Обновление: Для вниз/закрытия избирателя: Как это неясно?
У меня есть два класса: семья и член. Класс участника инициализируется внутри класса Family. Следующий код
$Winchesters = new Family([
["Dean"],
["Sam", "Dean"],
]);
результаты:
object(Family)#1 (2) {
["Dean"] => object(Member)#2 (2) {
["name"] => "Dean"
["niisan"] => NULL
}
["Sam"] => object(Member)#3 (2) {
["name"] => "Sam"
["niisan"] => "Sam has a niisan named X"
}
}
Во время выполнения сначала Member
с именем «Дин» создается и присваивается переменной Dean
внутри Family
. Во-вторых, Member
«Сэм» создан, но Sam
зависит от первого созданного объекта, Dean
. Sam
необходимо получить доступ к родительскому классу Family
, а затем получить доступ к Dean
и получить свойство name
и использовать его при назначении переменной niisan
.
Пожалуйста, проверьте пример JavaScript. Я хочу подражать точной функциональности в PHP. Передайте основной класс дочернему классу, чтобы дочерний класс мог получить доступ к более поздним переменным внутри основного класса.
'родитель :: methodname' – Farkie
@Farkie Я буду доступ к суб-класс в главном классе. Как мне реализовать «parent :: methodname» таким образом, чтобы эта строка работала над $ this-> niisan = $ this-> name. «имеет ниизан по имени». Родитель :: $ member_lookup-> имя; '? – akinuri
'$ this -> $ member [0] = new Member ($ member);' каждый раз перезаписывает один и тот же элемент массива 'member'. Кроме того, это должен быть '$ this-> member', а не' $ this -> $ member'. – Barmar