我在根目录中有一个主要的php文件,其他几个目录包含在不同的目录中,我不想允许在主文件中写入的少数函数在另一个文件中包含时执行。 我运行了一个测试代码并试图通过重新声明它来覆盖一个函数但是它返回了一个错误:
a.php只会
<?php
function show(){echo "a";}//This is what I want to over-ride with
include 'b.php';
b.php
<?php
function show(){echo "b";}//This is the function i want to restrict.
show();
致命错误:无法在xx行的C:\ xampp \ htdocs \ xyz.php中重新声明abc()(之前在C:\ xampp \ htdocs \ abc.php:3中声明)。
答案 0 :(得分:1)
您可以使用匿名函数(PHP5.3)
执行此操作$show = function(){
echo "a";
};
$show = function(){
echo "b";
};
$show();
现在echo "b"
。
答案 1 :(得分:0)
您无法重新声明某项功能。您需要为每个函数使用唯一的名称。
这些函数不会因为你包含它们所在的文件而执行。除非你在文件中主动调用它们。
我建议您评估包含文件的方式以解决您的问题。您可能还想查看include_once / require_once和function_exists条件。
E.g。
if ( ! function_exists( 'my_function' ) ) :
function my_function() {
}
endif;
答案 2 :(得分:0)
执行此操作的最佳方法是使用PHP的OOP features,它允许您指定方法的可见性。
答案 3 :(得分:0)
您可以在函数内检查是否包含“主文件”,请尝试以下操作:
function someFunction() {
if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) {
echo "Not included.";
} else {
echo "Included. No access.";
}
}
或者将条件置于函数定义的“外部”,因此如果包含该文件,则不会定义它。
但我会采用OOP方法。