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

Php 类-构造函数中需要冲突

Php 类-构造函数中需要冲突,php,wordpress,scope,require,Php,Wordpress,Scope,Require,我正在编写一个Wordpress插件,我不确定函数名是否冲突 我有一个名为test\u handling.php的文件,其中包含以下内容: function testing() { echo 'test'; } 我在类构造函数中包含了这个文件(名为testcls.class.php): 在这种情况下,我想知道testing()函数是否仅在TestCls类中可用,或者如果其他WP插件具有相同名称的函数,它是否会产生冲突 包含文件时,它包含的代码将继承该变量 包含发生的行的范围。任何可用的变量 在

我正在编写一个Wordpress插件,我不确定函数名是否冲突

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

function testing() { echo 'test'; }
我在类构造函数中包含了这个文件(名为
testcls.class.php
):

在这种情况下,我想知道
testing()
函数是否仅在
TestCls
类中可用,或者如果其他WP插件具有相同名称的函数,它是否会产生冲突

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


这意味着是的,您可能会有冲突。

即使使用相同的名称,如果定义为类方法,函数的作用域也会不同。要调用常规函数,请执行以下操作:

testing();
结果将是:

'test'
类方法需要类的实例或静态调用。要调用方法类,您需要以下格式:

$class->test();

综上所述,如果将函数测试定义为类方法,则函数测试将有所不同。这样,就不会有冲突

另一种封装函数并确保使用正确的方法是使用名称空间。如果在test_handling.php中使用名称空间

<?php
namespace myname;

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

您将按如下方式访问功能测试:

<?php 
require_once "test_handling.php";

use myname;

echo myname\testing();

那么,你知道如何解决这个问题吗?@Valentin名称空间可以是你的解决方案,正如Jose提到的。因为你没有将它定义为一个方法类。它是test_handling.php中定义的独立函数。使函数特定于您的作用域的另一种方法是使用名称空间。要将其定义为类方法,我需要做的是在函数定义之前放置
static
关键字,并使用
TestCls::testing()
调用此函数,对吗?因为它也不起作用1.你必须把它带到课堂上。例如,otherfunction是一个类方法。在我的情况下,我无法更改此方法(关联的替换太多)。。顺便说一句,正如您所说,对于名称空间,我不必修改
otherfunction()
函数?好的,我将使用名称空间,感谢您和bažmegakapa:)!
<?php
namespace myname;

function testing(){echo 'test';}
?>
<?php 
require_once "test_handling.php";

use myname;

echo myname\testing();