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

问题描述:

我正在尝试将WordPress头文件带入我的应用程序。 我有这个类与WordPress的连接,并提取我需要的HTML:PHP:从另一个类中检索类方法的实例

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年。

我伟大的朋友托尼Sologubov已经通过Facebook回答我: “我相信,问题是,你在呼唤WP程序两次尝试做这样的事情在你的Worpdress类:

<?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; 
} 

他完全正确,我已经实现了他的建议如下:

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; 
} 

而且访问它上面一样。谢谢托尼!我今天因为你了解了很多关于OOP PHP的知识。