我正在查看这个问题PHP - defining classes inside a function(如何获得如此多的投票超出了我的视野)
简而言之,它不能回答我的问题。
具体地说,是紧随Wordpress插件创建代码之后
例如,一旦创建,便可以在任何插件中使用简码
//Create callback for shortcode
function DisplayNumberFive(){
echo "5";
}
//create shortcode as [DNF]
add_shortcode('DNF','DisplayNumberFive');
现在我想显示数字5
的任何地方
do_shortcode("[DNF]");
,输出为5
现在牢记此功能,例如拥有一个类就很有意义
//Create callback for shortcode
function CreateFooClass(){
class Foo{
function Bar(){
return "FooBar";
}
}
}
//Create shortcode as [include_Foo]
add_shortcode('include_foo','CreateFooClass');
//Use case
do_shortcode("[include_foo]");
$foo = new Foo();
echo $foo->Bar();
//Ouput
"FooBar"
我的问题是,如果我做错了此操作,或者是否引入了我看不到的错误。 Bar()
甚至可以在函数中使用吗?
目标是消除在wordpress上的插件内重复文件的需要,因此,如果您创建了一个类(例如,在一个插件上记录事件),但又想为另一个插件记录事件,则无法访问一个插件中的文件彼此之间,因此必须在另一个插件中创建一个重复文件,以消除创建短代码将使该类可在所有插件中的任何位置访问的问题,这就是我来到此解决方案的方式,我只是担心这可能不正确考虑到我找不到任何详细说明任何人执行此操作的google结果,这使我产生疑问,是否没有其他人这样做?
那为什么没人这样做呢?
答案 0 :(得分:1)
从未将WordPress短代码设计为在PHP上下文中调用。它们应在内容中使用。能够在PHP中调用简码比通常要做的更多的是实现细节。
所以,是的,从技术上讲,您可以使用它从PHP调用短代码,以将其用作一种类加载机制。
或者您可以自动加载 real 类,而$foo = new Foo();
无需任何额外的代码即可工作。
所以没有人在做(或类似的事情),因为自动加载是一件很容易的事。
答案 1 :(得分:1)
我知道Object Oriented Programming一直位居榜首,但WP使用了完全不同的范例:Structural programming。因此,请避免将其混合。
现在针对您的情况:
如果您使用autoloader,则具有类的文件将在首次使用时自动包括在内。
此外,您直接从PHP4使用类定义。在PHP5中,引入了关键字public
,private
,protected
(以调整类中方法的可见性)。
看起来do_shortcode
是为了返回HTML而创建的,因此下一个解决方案不能与其一起使用。 (但是尝试一下,我不确定。)
function CreateFooClass(){
if(!class_exists('Foo')) {
class Foo{
public function Bar(){
return "FooBar";
}
}
}
return new Foo()
}
$foo = CreateFooClass();
$foo->Bar();
答案 2 :(得分:-1)
在函数内部声明类可能是一个错误。
如果在函数内部出现类声明,则在调用该函数时定义该类。在调用该函数之前,该类将不可用,并且两次调用该函数将导致致命错误(“无法声明类…,因为该名称已在使用中”。)
由于在脚本执行过程中可能多次调用Wordpress短代码,因此在处理程序中为短代码声明一个类可能会导致错误。如果要声明一个类,请在文件的顶层执行该操作。