WordPress管理中的命名空间SPL_autoload问题

时间:2013-01-23 作者:mbadger

我正在Worpdress插件中试验PHP名称空间。该插件包含一个加载程序文件,该文件设置spl\\U自动加载功能,然后根据当前页面请求是否为“admin()”,实例化不同的控制器。

[WP\\u PLUGIN\\u DIR]/lhes\\u实验/加载程序。php

use lhes\\system\\controllers as sys;

set_include_path(\'./wp-content/plugins/lhes_experiment/\' . PATH_SEPARATOR .     get_include_path());
spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register( \'spl_autoload\' );

$config = array( ... );

if( is_admin() ){
   error_log( var_export( new sys\\experiment( ), true ), 0 );
}else{
   error_log( var_export( new sys\\experiment( ), true ), 0 );
}
[WP\\U PLUGIN\\u DIR]/lhes\\U实验/lhes/系统/控制器/实验。php

namespace lhes\\system\\controllers;
   class experiment extends test{
      public $property;
      function __construct( ){
         $this->property = \'owls\';
      }
   }
[WP\\U插件\\U目录]/lhes\\U实验/lhes/系统/控制器/测试。php

namespace lhes\\system\\controllers;
   class test{
      public $test;
      function __construct( ){
         $this->test = \'hi\';
      }
   }
当请求not 和管理页面,代码按预期运行,错误日志显示:

[23-Jan-2013 12:55:27 UTC] lhes\\system\\controllers\\experiment::__set_state(array(
   \'property\' => \'owls\',
   \'test\' => \'hi\',
))
但是,当请求is 对于管理页面,完全相同的代码不起作用:

[23-Jan-2013 12:56:17 UTC] PHP Fatal error:  Class \'lhes\\system\\controllers\\test\' not found in C:\\Program Files (x86)\\Zend\\Apache2\\htdocs\\wp-content\\plugins\\lhes_experiment\\lhes\\system\\controllers\\experiment.php on line 4
我花了一个多小时在谷歌上搜索这个问题,但似乎什么也找不到。如果有人对为什么会发生这种情况有任何想法的话,我真的很想得到一些建议。

1 个回复
最合适的回答,由SO网友:Wyck 整理而成

你的set_include_path 是错误的。

而是使用:

set_include_path(plugin_dir_path(__FILE__));
用您的代码对其进行了测试,效果良好。

供参考:http://codex.wordpress.org/Determining_Plugin_and_Content_Directories

结束

相关推荐

如何根据登录的用户有不同的Header.php?

我已经使用wishlist成员插件创建了wordpress成员网站。但我想要不同的header.php 基于不同的登录名。用户包括:打印、网络和免费免费用户登录时–我想要header1.php 当打印用户登录时,加载并保留直到他注销header2.php 当Web用户登录时,加载并保留直到他注销header3.php 如果没有人登录默认设置,则加载并保留直到他注销header.php 保持不变。请协助完成此操作。你好Raghav。