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的知识。