从外部类定义中访问变量?

时间:2013-12-26 16:32:17

标签: php wordpress wordpress-plugin scope procedural-programming

我是PHP的新手,不管我所知道的是它的“功能编程”方面。我使用的插件似乎遵循“面向对象编程”样式,并且想要访问变量以在我自己的函数中使用。我不知道怎么做。

为了给你一个想法,这就是插件中的类定义(类似):

<?php

    class WPSEO_Frontend {
        public function canonical() {
            $canonical = get_page_link();
        }
    }
?>

这就是插件中的另一个文件如何调用变量$canonical

<?php
    class WPSEO_Twitter extends WPSEO_Frontend {
        public function twitter_url() {
            echo '<meta name="twitter:url" content="' . esc_url( $this->canonical() ) . '"/>' . "\n";
        }
    }
?>

现在,我希望能够在我的函数中以不同的文件访问$canonical变量(在函数式编程风格中)。例如,像这样:

<?php
    function seo_meta_tags() {
        echo '<meta property="og:url" content="' . $canonical . '">' . PHP_EOL;
    }
?>

我该怎么做?有可能吗?

PS:鉴于我的知识,我不知道我是否遗漏了任何东西,所以请告诉我。

2 个答案:

答案 0 :(得分:2)

这里有几个问题。

  1. 您的WPSEO_Frontend::canonical函数应返回一个值,以便在代码的其他部分调用函数时返回值而不是void。
  2. 由于canonicalWPSEO_Frontend的成员函数,因此您需要WPSEO_Frontend的实例来调用canonical函数。
  3. 更新WPSEO_Frontend::canonical功能以返回get_page_link()

    <?php
    
        class WPSEO_Frontend {
            public function canonical() {
                return get_page_link();
            }
        }
    ?>
    

    然后在seo_meta_tags函数中使用WPSEO_Frontend的实例来调用canonical

    <?php
        function seo_meta_tags() {
            $wp_seo_frontend = new WPSEO_Frontend();
            echo '<meta property="og:url" content="' . $wp_seo_frontend->canonical() . '">' . PHP_EOL;
        }
    ?>
    

答案 1 :(得分:2)

您需要拥有WPSEO_Frontend类(或扩展它的类)的实例。我称之为$instance。然后,您将该变量传递给您的函数。

我假设第一个函数要么返回值,要么使用$ this关键字将其设置为属性。

WPSEO_Frontend类可能具有该属性的getter函数,因此您可能需要执行

$instance->getCanonical();

或者只是

$instance->canonical;

如果没有看到更多的实际代码,我们就无法告诉你更多。如果函数canonical()实际上返回了某个东西,那就是要调用的函数。