Php 访问已由单独类中的方法实例化的类

Php 访问已由单独类中的方法实例化的类,php,oop,Php,Oop,简而言之:如何访问由不同类的方法实例化的类的方法 我现在正在看一段代码,它可以执行以下操作(顺便说一句,更改代码不是一个选项。它不是我的…我只是在破译它): 一个类有一个实例化不同类的方法。它看起来像这样: // this file is named fooClassHere.php class Foo{ public $meh; function bar(){ $something = new Baz; $this->meh = $somet

简而言之:如何访问由不同类的方法实例化的类的方法

我现在正在看一段代码,它可以执行以下操作(顺便说一句,更改代码不是一个选项。它不是我的…我只是在破译它):

一个类有一个实例化不同类的方法。它看起来像这样:

// this file is named fooClassHere.php class Foo{ public $meh; function bar(){ $something = new Baz; $this->meh = $something->getStuff(); } } //该文件名为fooClassHere.php 福班{ 公共财政:百万美元; 功能条(){ $something=newbaz; $this->meh=$something->getStuff(); } } 我想弄清楚的是如何访问这个实例化类Baz的方法。另一个页面包含如下内容:

include 'bazClassHere.php'; include 'fooClassHere.php'; $a = new Foo; $a->bar(); 包括“bazClassHere.php”; 包括“fooClassHere.php”; $a=新Foo; $a->bar(); 那么,Baz现在是否应该以某种方式(而不仅仅是我分配给$this->meh的getStuff())全部可用呢?其中包括Foo和Baz类,代码实例化Foo,然后调用Foo的方法bar(),后者反过来实例化Baz类。显然,下面将显示Baz的getStuff()方法返回的数据:

var_转储($a->meh); 但是我想访问Baz的所有可用方法,而不需要像在Foo的bar方法中那样通过手动分配它们的中间步骤:$this->meh=$something->getStuff()

$this->meh = $something->getStuff() 也许是这样(但这当然不行): $a=新Foo
$a->bar()//将Baz实例化为$something $a->something->fromBaz()//$有些东西是Baz的一个例子,是吗?不


我希望这是有意义的,我没有把这个问题和我的笔记混淆。确认!>_ 如果修改代码不是一个选项,那么你就不走运了。要实现您的目标,请执行以下操作:

class Foo {
    public $meh;
    public $something;

    function bar(){
        $this->something = new Baz;
        $this->meh = $this->something->getStuff();
    }
}
之后,您可以执行以下操作:

$foo = new Foo;
$foo->something->myBazMethod();

如果修改代码不是一个选项,那么你就不走运了。要实现您的目标,请执行以下操作:

class Foo {
    public $meh;
    public $something;

    function bar(){
        $this->something = new Baz;
        $this->meh = $this->something->getStuff();
    }
}
之后,您可以执行以下操作:

$foo = new Foo;
$foo->something->myBazMethod();

您可以在Foo类上使用_调用,在php.net上查找它

基本上,当你试图调用一个类没有的函数时,会调用。在那里,您可以将请求传递给内部对象

class a
{
    protected $b;

    public function __construct()
    {
        $this->b = new b();
    }

    public function meh()
    {
        return 'meh';
    }

    public function __call($func, $param)
    {
        return call_user_func_array(array($this->b, $func), $param);
    }
}

class b
{
    public function yo($something)
    {
        return $something;
    }
}

$a = new a();
echo $a->meh();
echo $a->yo('dude!');

您可以在Foo类上使用_调用,在php.net上查找它

基本上,当你试图调用一个类没有的函数时,会调用。在那里,您可以将请求传递给内部对象

class a
{
    protected $b;

    public function __construct()
    {
        $this->b = new b();
    }

    public function meh()
    {
        return 'meh';
    }

    public function __call($func, $param)
    {
        return call_user_func_array(array($this->b, $func), $param);
    }
}

class b
{
    public function yo($something)
    {
        return $something;
    }
}

$a = new a();
echo $a->meh();
echo $a->yo('dude!');

那么OP的$a->something->fromBaz()是否有效?例如,他的某物和你的baz都是baz的实例?不,OPs不起作用,因为$something只是bar()方法的局部变量。他需要将某个对象设置为类变量,并通过$this进行设置,这样他就可以通过Foo对象访问类外的新Baz对象。太棒了!我复制了我正在查看的实际代码(因为我无法更改原始代码,但希望实际看到这项工作),将实例化Baz的变量创建为类变量,并按照公布的方式工作。这有助于我更清楚地了解整个OOP过程。谢谢(转到FSU)。那么OP的$a->something->fromBaz()就行了?例如,他的某物和你的baz都是baz的实例?不,OPs不起作用,因为$something只是bar()方法的局部变量。他需要将某个对象设置为类变量,并通过$this进行设置,这样他就可以通过Foo对象访问类外的新Baz对象。太棒了!我复制了我正在查看的实际代码(因为我无法更改原始代码,但希望实际看到这项工作),将实例化Baz的变量创建为类变量,并按照公布的方式工作。这有助于我更清楚地了解整个OOP过程。谢谢(去FSU)。嘿,马里奥,你有没有一个例子来说明你是如何做到这一点的?我使用了_调用来处理一个不存在的被调用方法,但不访问一个确实存在但属于另一个对象的方法。嘿,Mario,你有这样一个例子吗?我使用_调用来处理被调用的不存在的方法,但不访问确实存在但属于不同对象的方法。