Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从另一个类检索类方法的实例_Php_Wordpress_Oop_Namespaces - Fatal编程技术网

PHP:从另一个类检索类方法的实例

PHP:从另一个类检索类方法的实例,php,wordpress,oop,namespaces,Php,Wordpress,Oop,Namespaces,我正在尝试将WordPress标题引入我的应用程序。 我有一个与Wordpress连接并提取我需要的HTML的类: namespace XLite\Module\Guru\WordPress; /** * Main module */ class WordPress extends \XLite\Base\Singleton { /** * Get WordPress header and body class * * @return array

我正在尝试将WordPress标题引入我的应用程序。 我有一个与Wordpress连接并提取我需要的HTML的类:

namespace XLite\Module\Guru\WordPress;

/**
 * Main module
 */
class WordPress extends \XLite\Base\Singleton
{
    /**
     * Get WordPress header and body class
     *
     * @return array
     */
    public static function getWPHeader($element){

        $WP = array();

        require_once(__DIR__ . '../../../../../../../../../wp-blog-header.php');
        $wpHeader = self::ob_get_call('get_header');

        if (!isset($dom)) {
            $dom = new \domDocument;
        }
        $dom->loadHTML($wpHeader);

        //Get body class
        $bodyElements = $dom->getElementsByTagName("body");
        foreach ($bodyElements as $node) {
            $bodyClass = substr($node->getAttribute('class'), 5);
        }
        $WP['bodyClass'] = $bodyClass;

        $headerElement = $dom->getElementById("masthead");
        $WP['header'] = $dom->saveHTML($headerElement);

        return $WP;
    }
}
这段代码执行得很好。我在另一个文件中引用它,如下所示:

namespace XLite\Module\Guru\WordPress\View\Header\Customer;

/**
 * Header
 *
 * @ListChild (list="body", zone="customer", weight="10")
 */
class Header extends \XLite\View\Menu\Customer\ACustomer
{
    /**
     * Get WordPress Header
     *
     * @return html
     */
    public function getWPHeader(){
        $wpHeader = \XLite\Module\Guru\WordPress\WordPress::getWPHeader();

        echo $wpHeader['header'];
    }
}
这很有效!我可以回显标题HTML。但我需要再次访问同一个类,以便附加主体样式:

namespace XLite\Module\Guru\WordPress\View;

/**
 * Replace Body Template
 */
abstract class Controller extends \XLite\View\ControllerAbstract implements \XLite\Base\IDecorator
{
    /**
     * Get WordPress Body class
     *
     * @return string
     */
    public function getWPBodyClass(){
        $wpHeader = \XLite\Module\Guru\WordPress\WordPress::getWPHeader();

        echo $wpHeader['bodyClass'];
    }
}

当两个文件都处于活动状态时,只有一个文件显示WordPress类中的内容。如果我注释掉或删除其中一个查看器类,则会显示另一个查看器类。我认为我只需要访问这个类一次,并将我需要的数据存储在一个实例中。但我真的迷路了,代码实际上更复杂,这让我头晕目眩。:-)提前感谢,我已经在这个网站上潜伏了将近10年。

我的好朋友托尼·索洛古博夫通过Facebook回答我: “我相信,问题是你调用了两次WP例程。在你的WorpAddress类中尝试这样做:

<?php

// storing wpHeader data in this property
protected static $wpHeader = null;

public static function getWPHeader($element) {
    if (!isset(self::$wpHeader)) {
        // your current implementation of this method
        // save results into self::$wpHeader
    }

    return self::$wpHeader;
}
谢谢Tony!!!因为你,我今天学到了很多关于OOP PHP的知识

protected static $wpHeader = null;

//$wpHeader = $this->getWPHeader();

/**
 * Get WordPress header
 *
 * @return array
 */
public static function getWPHeader(){

    //$WP = array();
    if (!isset(self::$wpHeader)) {
        require_once(__DIR__ . '../../../../../../../../../wp-blog-header.php');

        $wpHeader = self::ob_get_call('get_header');


        if (!isset($dom)) {
            $dom = new \domDocument;
        }

        $dom->loadHTML($wpHeader);

        $headerElement = $dom->getElementById("masthead");

        self::$wpHeader = $dom->saveHTML($headerElement);

        //echo $Header;
    }

    return self::$wpHeader;
}