获取“”的属性;父创建“;对象


Get properties of "parent creating" object

我有一个对象,我只知道类名,比方说"A"。我正在尝试访问此对象的属性。不幸的是,我正试图从另一个对象实例访问它们,该对象实例由完全不同的类(既没有扩展也没有关联)的第一个对象创建。下面的简化代码解释了这种情况。

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访问对象,因为稍后在B类中调用了一个"布局模板"文件,如果更新了核心代码,它就不会被触及。这样一来,我就无法真正接触到这两个类。

使用object B中的debug_backtrace(),我可以看到我需要的对象的属性后退了几步,但我认为以这种方式使用函数来获得我需要的信息是相当棘手的,我认为这也是一个相当密集的函数。

我是一个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了解更多信息。