【问题标题】:Multiple Method Access Inside Class PHP [closed]PHP类内的多方法访问[关闭]
【发布时间】:2020-05-09 06:18:56
【问题描述】:

我是 PHP OOP 的新手,对方法感到好奇。如何在方法中制作方法(我不知道它的名字)? 比如我可以这样访问

<?php
$myClass = new CarClass;
$myClass->createNew->bodySection->setColor("red");

就像 Codeigniter 使用 this 调用模型或库一样。

<?php
$this->myLibrary->getData()

它不同于方法调用之间没有参数的方法链接,就像javascript一样。

我能做到吗?还是有其他选择?

谢谢

【问题讨论】:

  • createNew 属性中放置一个对象。它指向的对象应该有一个包含另一个对象的bodySection 属性。最后一个对象有一个setColor() 方法。
  • 请查看示例代码
  • 这个问题似乎与PHP method chaining?重复
  • @Sherif,不,它不同,我的意思是$myClass-&gt;createNew-&gt;bodySection-&gt;setColor("red"),而不是$myClass-&gt;createNew()-&gt;bodySection()-&gt;setColor("red")
  • 只是在类中“分类”方法

标签: php class oop methods


【解决方案1】:

给定代码,

$myClass = new myCar;
$myClass->createNew->bodySection->setColor("red");

我们可以做以下陈述:

  1. myCar 有一个名为“createNew”的属性。
  2. createNew 包含一些未知对象
  3. 未知对象有一个名为 bodySection 的属性
  4. 名为 bodySection 的属性包含一个未知对象,该对象具有名为 setColor() 的方法

清如泥?

有几种方法可以说明这一点;这是一个:

class myCar {

    public createNew;

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

class Foo {

    public bodySection;

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

class Bar {

    public function setColor($color) {
        echo "Color is $color";
    }
}

$myClass = new MyClass;
$myClass->createNow->bodySection->setColor('red');

// output: Color is red

这里的第一个问题是“createNow”作为属性没有意义;这是一个动作,而不是 myCar 将拥有或做的事情。

同样,bodySection 可能会有一个颜色作为属性,用它自己的 setter 方法设置,而不是一些外部对象。

归根结底,制作长长的指针链不是要追求的;相反,它们可能最好保持尽可能短。否则你的对象可能对很多事情了解太多。

【讨论】:

    猜你喜欢
    • 2019-06-25
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2018-05-14
    • 2013-02-17
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    相关资源
    最近更新 更多