У меня есть объект, который я просто знаю имя класса, скажем, «А». Я пытаюсь изменить свойства этого объекта. К сожалению, я пытаюсь получить к ним доступ из другого экземпляра объекта, созданного первым объектом, полностью другой класс (ни расширенный, ни связанный). Упрощенный код ниже, чтобы объяснить ситуацию.
Class A {
public $var; //some important stuff
function createObjectB() {
$b = new B();
}
}
Class B {
// a totally different class not related with A
}
Это сторонний код компонента в CMS, поэтому я не могу связываться с основным кодом (или, по крайней мере, я так думаю?), Пытающимся передать свойство вместе с созданным объектом B, не вызывая ошибок в более позднее время, если этот компонент обновляется.
Я могу получить доступ к объекту из класса B из-за файла «layout-template», позже вызванного в классе B, который не будет затронут, если обновится основной код. Таким образом, я не могу прикоснуться ни к одному из этих классов.
Используя debug_backtrace()
от object B
Я могу сделать несколько шагов назад по свойствам нужного мне объекта, но я думаю, что довольно странно использовать эту функцию для получения необходимой мне информации, и я думаю, что это довольно интенсивная функция для использования.
Я довольно новичок в PHP, просто неправильно, что я пытаюсь достичь? Есть ли лучший способ?
Наследственность — это устоявшийся принцип программирования, и PHP использует его в моделировании вашего объекта. Этот принцип будет влиять на то, как многие классы и объекты связаны друг с другом.
Например, при расширении класса подкласс наследует все открытые и защищенные методы родительского класса. Если класс не перезаписывает, эти методы сохраняют свою первоначальную функциональность.
Это полезно для определения и абстрагирования функциональности и позволяет реализовать дополнительную функциональность в похожих объектах без необходимости переопределения всей общей функциональности.
Важное замечание: Если не используется автозагрузка, классы должны быть определены перед использованием. Если класс расширяет другой, тогда родительский класс должен быть объявлен перед структурой дочернего класса. Это правило применяется к классам, которые наследуются от других классов и интерфейсов.
<?php
class Foo
{
public function printItem($string)
{
echo 'Foo: ' . $string . PHP_EOL;
}
public function printPHP()
{
echo 'PHP is great.' . PHP_EOL;
}
}
class bar extends Foo
{
public function printItem($string)
{
echo 'Bar: ' . $string . PHP_EOL;
}
}
$foo = new Foo();
$bar = new Bar();
$foo->printItem('baz'); // Salida: 'Foo: baz'
$foo->printPHP(); // Salida: 'PHP is great'
$bar->printItem('baz'); // Salida: 'Bar: baz'
$bar->printPHP(); // Salida: 'PHP is great'
?>
Вы должны знать, что вы можете генерировать новые объекты в другие классы. Но вы можете наследовать все свойства от класса A до класса B без создания нового экземпляра. Например:
<?php
Class A {
public function something() {
$var = 'Hello!';
return $var;
}
}
Class B extends A {
function createObjectB() {
echo $this->something().' I am learning classes in php';
}
}
$b = new B;
$b->createObjectB();
?>
Пожалуйста, посетите эту страницу http://php.net/manual/es/language.oop5.inheritance.php для больше о.
Других решений пока нет …