类 - 构造函数中需要冲突的要求

4

我正在编写一个WordPress插件,不确定函数名称是否会发生冲突。

我有一个名为test_handling.php的文件,其中包含以下内容:

function testing() { echo 'test'; }

我在一个类的构造函数中引入了这个文件(文件名为testcls.class.php):

class TestCls {
   function __construct() {
      require_once('test_handling.php');

      testing();
   }

   function otherfunction() {
      testing();
   }

   // ...
}

在这种情况下,我想知道testing()函数是否仅在TestCls类中可用,或者如果另一个WP插件具有相同名称的函数,它是否会创建冲突?
2个回答

2
即使名称相同,如果将函数定义为类方法,则其作用域也会有所不同。要调用普通函数,请执行以下操作:
testing();

结果将是:

'test'

类方法需要一个类的实例或静态调用。要调用类方法,需要以下格式:
$class->test();

或者
OtherPlugin::test();

总之,如果将函数测试定义为类方法,则其将不同于普通函数。这样,您就不会遇到冲突的问题。
另一种封装函数并确保使用正确函数的方法是使用命名空间。如果在您的test_handling.php中使用命名空间。
<?php
namespace myname;

function testing(){echo 'test';}
?>

您将以如下方式访问功能测试:
<?php 
require_once "test_handling.php";

use myname;

echo myname\testing();

现在您确定所调用的函数。

因为您没有将其定义为方法类。它是在test_handling.php中定义的独立函数。使函数特定于您的范围的另一种方法是使用命名空间。 - Jose Areas
要将其定义为类方法,我需要在函数定义之前加上static关键字,并使用TestCls::testing()来调用这个函数,对吗?因为它也不起作用。 - Val
你必须将它带到你的类中。例如,otherfunction是一个类方法。 - Jose Areas
我在我的情况下无法更改此方法(关联了太多替换)。顺便说一句,正如你所说,使用命名空间,我不需要修改 otherfunction() 函数吗? - Val
好的,我会使用命名空间,感谢你和bažmegakapa :) ! - Val

2
当一个文件被包含时,它所包含的代码会继承包含该文件的那一行的变量作用域。在调用文件的那一行可用的任何变量都将从那一点开始在被调用的文件中可用。但是,在被包含的文件中定义的所有函数和类都具有全局作用域。这意味着您可能会遇到冲突。

所以,你知道我该怎么修复这个问题吗? - Val
@Valentin 命名空间可能是你的解决方案,就像 Jose 提到的那样。 - kapa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接