php - 在函数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 插件中重复文件的需要,因此,如果您创建一个类,例如用于记录一个插件上的事件,但您还想记录另一个插件的事件,则一个插件中的文件无法相互访问所以必须在另一个插件中创建一个重复的文件,以消除创建短代码将允许在所有插件中的任何地方都可以访问该类,这就是我找到这个解决方案的方式我只是担心考虑到我可以这样做可能不正确没有找到任何详细说明任何人这样做的谷歌结果,这让我怀疑是否没有其他人这样做,这一定是有原因的。
那么为什么没有人这样做呢?
解决方案
据我了解,面向对象编程在十多年来一直处于领先地位,但 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();
推荐阅读
- c# - 签名可写 URL 出错:我们计算的请求签名与您提供的签名不匹配
- jquery - 如何创建 javascript/jquery 实时检查输入字段中的禁用词
- java - 用于单元测试的 spring-boot junit 负载测试属性资源
- ipv6 - 如何计算两个 IPv6 地址之间的地址数
- bash - Bash 字符串 while 循环
- ruby-on-rails - 如何在 RSPEC 中测试或存根 Sidekiq::Batch?
- python - 使用 Python GUI 添加整数时遇到问题
- reactjs - flow - 使用 Flow 进行输入的 react 路由器的 history.push 可以使用哪种类型?
- exoplayer - 对于 Exoplayer,我可以添加(或启用?)一个按钮来使用标准控件切换隐藏式字幕,例如在 PlayerControlView 中?
- javascript - 在 Three.js 中制作一个以图像为边的立方体