Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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 - Fatal编程技术网

在php函数中不使用类的原因是什么

在php函数中不使用类的原因是什么,php,wordpress,Php,Wordpress,我在看这个问题(我不知道它怎么会有这么多的赞成票) 简言之,它没有回答我的问题 具体来说,以下是wordpress插件创建代码 例如,一个短代码可以在任何插件中使用 //为短代码创建回调 函数DisplayNumberFive(){ 回声“5”; } //将短代码创建为[DNF] 添加_短码('DNF','DisplayNumberFive'); 现在,无论我想在哪里显示数字5,我都可以简单地执行 do_短码([DNF]”); 输出为5 现在,考虑到这个功能,有一个类作为例子是否有意义 //

我在看这个问题(我不知道它怎么会有这么多的赞成票)

简言之,它没有回答我的问题

具体来说,以下是wordpress插件创建代码

例如,一个短代码可以在任何插件中使用

//为短代码创建回调
函数DisplayNumberFive(){
回声“5”;
}
//将短代码创建为[DNF]
添加_短码('DNF','DisplayNumberFive');
现在,无论我想在哪里显示数字
5
,我都可以简单地执行

do_短码([DNF]”);
输出为
5

现在,考虑到这个功能,有一个类作为例子是否有意义

//为短代码创建回调
函数CreateFooClass(){
福班{
功能条(){
返回“FooBar”;
}
}
}
//将短代码创建为[包含\u Foo]
添加_短代码('include_foo','CreateFooClass');
//用例
do_短码(“[包含_foo]”);
$foo=新foo();
echo$foo->Bar();
//输出
“FooBar”
我的问题是我是否做得不对,或者这是否引入了我看不到的bug。
Bar()
是否可以访问,因为它位于函数中

我们的目标是消除wordpress插件中重复文件的需要,因此,如果您创建了一个类,例如,用于记录一个插件上的事件,但您也希望记录另一个插件上的事件,则一个插件中的文件彼此不可访问,因此必须在另一个插件中创建重复文件,以便消除此问题创建一个短代码将允许在所有插件中的任何地方都可以访问该类,这就是我如何找到此解决方案的原因我只是担心它可能不正确,因为我找不到任何谷歌结果详细说明有人这样做,这使我怀疑是否没有其他人这样做,这一定是有原因的


那么为什么没有人这么做呢?

WordPress短代码从来都不是设计用来在PHP上下文中调用的。它们是用来制作内容的。能够在PHP中调用短代码比您通常所做的更多地是一个实现细节

所以,是的,从技术上讲,您可以使用它从PHP调用shortcode,将其用作一种类加载机制

或者您可以自动加载一个真正的类并
$foo=newfoo()将在没有任何额外代码的情况下工作


因此,没有人会这么做(或做类似的事情),因为自动加载是一件很好的事情。

WordPress短代码从来都不是为在PHP上下文中调用而设计的。它们是用来制作内容的。能够在PHP中调用短代码比您通常所做的更多地是一个实现细节

所以,是的,从技术上讲,您可以使用它从PHP调用shortcode,将其用作一种类加载机制

或者您可以自动加载一个真正的类并
$foo=newfoo()将在没有任何额外代码的情况下工作

因此,没有人会这么做(或做类似的事情),因为自动加载是一件很好的事情。

我知道这已经是最重要的十几年了,但WP使用了一种完全不同的模式:。所以,尽量避免混合这个

现在来谈谈你的情况:

如果使用,则具有类的文件将自动包含在第一类使用中

此外,可以直接使用PHP4中的类定义。在PHP5中引入了关键字
public
private
protected
(以调整类中方法的可见性)

它看起来是为了返回HTML而创建的,所以下一个解决方案不能与它一起使用。(但是试试看,我不确定。)

我知道这已经是最重要的十几年了,但是WP使用了一个完全不同的范例:。所以,尽量避免混合这个

现在来谈谈你的情况:

如果使用,则具有类的文件将自动包含在第一类使用中

此外,可以直接使用PHP4中的类定义。在PHP5中引入了关键字
public
private
protected
(以调整类中方法的可见性)

它看起来是为了返回HTML而创建的,所以下一个解决方案不能与它一起使用。(但是试试看,我不确定。)


在阅读了您链接的问题后,似乎对于这是否真的是坏习惯IMHO仍没有定论,因此进行了投票。最大的问题是,如果您调用
CreateFooClass()
两次,则会出现致命错误。我建议将该类放入一个专用文件中,只需使用
CreateFooClass()
函数
require\u once()
该类文件即可。这使得您的类文件可以导入,而不需要出现
CreateFooClass()
8年后,我假设可能有人会有一个答案@RussJ,或者至少使用了一些新的神奇代码。您从何处获得了不需要文件夹外的文件的想法?我还想问,当存在自动加载或只是简单的旧require_once包含时,这种定义类的方法如何有用。不幸的是,我对WordPress的结构一点也不熟悉。然而,我假设您的困境是您的插件不知道用户安装的类?如果是这种情况,那么将类发送到插件的子文件夹中。如果我的评论完全没有意义,那么请详细说明你所说的
你不能要求文件夹之外的文件
?在阅读了你链接的问题后,似乎还没有定论这是否真的是一种坏做法,因此需要向上投票。最大的问题是如果你调用
CreateFooClass()
两次之后,您将得到一个致命错误。我建议将该类放入一个专用文件中,只需使用
CreateFooClass()
函数
require\u once()
该类文件即可。这允许类文件可以导入,而不需要存在
function CreateFooClass(){
  if(!class_exists('Foo')) {
    class Foo{
      public function Bar(){
        return "FooBar";
      }
    }
  }
  return new Foo()
 }

$foo = CreateFooClass();
$foo->Bar();