小编Flo*_*osi的帖子

方法链接和类继承

我想我已经或多或少地设法掌握了OOP /继承,并且我认为我也理解了方法链的基础知识.但是我仍然对如何实际使用它们感到困惑.

我想做一些我以前在Magento工作时看到过的东西:在Magento中,我看到过某种用于方法链接的"选择器功能".这有点难以言喻,但它有点像:

$categoryName = Mage::getModel('catalog/category')->load($categoryId)->getName();
Run Code Online (Sandbox Code Playgroud)

load($categoryId)这是让我感兴趣的部分,例如,选择某个实例的函数并允许我在该特定实例上运行函数.

现在,我正在编写一个模块,允许我在我们的网站上配置某些促销活动.看到我们将有许多不同的促销活动,我希望它们易于配置和修改,我想做类似的事情.

所以,如果我想做这样的事情:

$prm = new Promotion();

$prm->addPromo('xmasPromo');
$prm->addPromo('nyPromo');

$prm->getPromo('xmasPromo')->setName('Promotion for Xmas!');
$prm->getPromo('nyPromo')->setName('Promotion for New Years!');

echo $prm->getPromo('xmasPromo')->getName(); // returns: Promotion for Xmas!
echo $prm->getPromo('nyPromo')->getName(); // returns: Promotion for New Years!
Run Code Online (Sandbox Code Playgroud)

那个类的定义怎么样呢?

这可能比我预期的要简单得多或复杂得多.在任何一种情况下,非常感谢!


编辑:所以我做了一些测试,信息deceze给了我,但我仍然感到困惑.错误命名并将2个类放在1个文件中,这就是我所做的:

类文件:

class Promotion {
    private $__arr = array();
    public function addPromo($name) {
        $this->__arr[$name] = new Promo();
    }
    public function getPromo($name) {
        $this->__arr[$name];
    }
}

class Promo {
    private $name;
    public function setName($name) {
        $this->name = $name;
    }
    public function …
Run Code Online (Sandbox Code Playgroud)

php oop inheritance method-chaining

5
推荐指数
1
解决办法
309
查看次数

标签 统计

inheritance ×1

method-chaining ×1

oop ×1

php ×1