php继承链,php – 方法链接和类继承

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

我想做一些我之前和Magento合作时见过的事情:

在Magento中,我看到了某种方法链中使用的“选择器函数”.这有点难以言喻,但它有点像:

$categoryName = Mage::getModel('catalog/category')->load($categoryId)->getName();

这是我感兴趣的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!

那个类的定义怎么样呢?

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

编辑:

所以我做了一些关于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 getName() {

return $name;

}

}

和运行文件:

require_once 'class.php';

error_reporting(E_ALL);

$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 'X: '.$prm->getPromo('xmasPromo')->getName(); // returns: Promotion for Xmas!

echo "\n";

echo 'N: '.$prm->getPromo('nyPromo')->getName(); // returns: Promotion for New Years!

这给了我致命错误:在第11行的/var/www/test/index.php中的非对象上调用成员函数setName().

但为什么?不应该getPromo()给我回来的对象?

再次感谢..

感谢这里的好人,现在就可以了.如果有人在这里通过相同或类似的问题,这里是最终的工作代码:

类别:

class Promotion {

private $__arr = array();

public function addPromo($name) {

$this->__arr[$name] = new Promo();

}

public function getPromo($name) {

return $this->__arr[$name];

}

}

class Promo {

private $name;

public function setName($name) {

$this->name = $name;

}

public function getName() {

return $this->name;

}

}

测试文件:

require_once 'class.php';

error_reporting(E_ALL);

$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 'X: '.$prm->getPromo('xmasPromo')->getName(); // returns: Promotion for Xmas!

echo "\n";

echo 'N: '.$prm->getPromo('nyPromo')->getName(); // returns: Promotion for New Years!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值