首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >php opencart方法在类中没有定义但可以调用?

php opencart方法在类中没有定义但可以调用?
EN

Stack Overflow用户
提问于 2012-11-22 18:55:35
回答 3查看 549关注 0票数 0

我正在阅读opencart php源代码,但我搞不懂。请在"$url = $rewrite->rewrite($url);“查看函数rewrite()。

代码语言:javascript
运行
复制
<?php
class Url {
    private $url;
    private $rewrite = array();

    public function link($route, $args = '', $connection = 'NONSSL') {
    ....

        foreach ($this->rewrite as $rewrite) {
            $url = $rewrite->rewrite($url);
        }
        return $url;
    }

public function addRewrite($rewrite) {
    $this->rewrite[] = $rewrite;
}
}
?>

为什么上面的代码不会产生错误?

重写函数没有在类Url中定义,并且类Url没有扩展任何人??但后来我更深入地追踪,似乎函数重写是在seo_url类上。

代码语言:javascript
运行
复制
class ControllerCommonSeoUrl extends Controller {
    // Add rewrite to url class
    if ($this->config->get('config_seo_url')) {
        $this->url->addRewrite($this);
    }
    ...
    public function rewrite($link) {
        if ($this->config->get('config_seo_url')) {
            $url_data = parse_url(str_replace('&amp;', '&', $link));
             ....

为什么?我还没有看到'Url‘和这个'ControllerCommonSeoUrl’之间的任何联系。我是不是漏掉了什么概念?我应该怎么做才能理解这些代码?这里需要一点指导。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-22 19:17:02

代码语言:javascript
运行
复制
foreach ($this->rewrite as $rewrite) {

迭代遍历中的任何值:

代码语言:javascript
运行
复制
private $rewrite = array();

也许那个Url->rewrite数组包含ControllerCommonSeoUrl的一个实例,这就解释了为什么$rewrite->rewrite()调用ControllerCommonSeoUrl->rewrite()

此外,您也可以通过尝试学习使用调试器来帮自己一个忙:)

票数 2
EN

Stack Overflow用户

发布于 2012-11-22 19:26:51

检查控制器是否正在加载脚本中的任何模型如果是,则可以在脚本中简单地访问模型方法,这可能是脚本的情况,如$this->重写。

票数 0
EN

Stack Overflow用户

发布于 2012-11-22 20:02:39

Url类是一个泛型类,可以调用多个网址重写方法,使人们可以更改网址重写代码。触发SEO代码以将其添加到Url类是在index.php文件中通过以下方式完成的

代码语言:javascript
运行
复制
// SEO URL's
$controller->addPreAction(new Action('common/seo_url'));

执行该操作时,ControllerCommonSeoUrl将执行index()方法,并且与您提供的代码一样,它将检查SEO在设置中是否处于活动状态。如果是,则将当前类添加到Url类中的重写数组中。然后,每当有人调用$this->url->link()时,每个重写类都会调用它们的rewrite()方法,随后的URL会被回传

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13511196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档