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 插件具有同名的函数,是否会产生冲突?

4

2 回答 2

2

当一个文件被包含时,它包含的代码继承了包含发生的行的变量范围。从那时起,调用文件中该行的任何可用变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围

来自includePHP 手册

这意味着是的,你可以有冲突。

于 2013-05-08T15:07:36.547 回答
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();

现在您确定了您正在调用的函数。

于 2013-05-08T15:12:11.113 回答