首页 > 解决方案 > 在函数php中不使用类的原因是什么

问题描述

我正在查看这个问题PHP - 在函数中定义类(它如何有如此多的赞成票超出了我的范围)

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

具体来说,跟随 wordpress 插件创建 codex

短代码是您可以在创建后的任何插件中使用的东西,例如

//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 插件中重复文件的需要,因此,如果您创建一个类,例如用于记录一个插件上的事件,但您还想记录另一个插件的事件,则一个插件中的文件无法相互访问所以必须在另一个插件中创建一个重复的文件,以消除创建短代码将允许在所有插件中的任何地方都可以访问该类,这就是我找到这个解决方案的方式我只是担心考虑到我可以这样做可能不正确没有找到任何详细说明任何人这样做的谷歌结果,这让我怀疑是否没有其他人这样做,这一定是有原因的。

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

标签: phpwordpress

解决方案


据我了解,面向对象编程在十多年来一直处于领先地位,但 WP 使用的是完全不同的范式:结构化编程。所以尽量避免混用。

现在对于您的情况:

如果您使用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();

推荐阅读