【问题标题】:How to disable a function while running script in php [duplicate]如何在php中运行脚本时禁用功能[重复]
【发布时间】:2014-02-22 20:14:08
【问题描述】:

我在根目录中有一个主 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 中声明)。

【问题讨论】:

  • 你为什么要这样做?
  • 请添加尝试过的代码!!!
  • 有一个漂亮的例子:stackoverflow.com/questions/3620659/…
  • 我不希望其他人可以访问主文件中定义的少数函数。

标签: php function


【解决方案1】:

您可以使用匿名函数 (PHP5.3) 来做到这一点

$show = function(){
    echo "a";
};
$show = function(){
    echo "b";
};
$show();

现在将echo "b"

【讨论】:

    【解决方案2】:

    您不能重新声明函数。您需要为每个函数使用唯一的名称。

    这些函数不会因为您包含它们所在的文件而执行。除非您在文件中主动调用它们。

    我建议您评估包含文件的方式来解决您的问题。您可能还想查看 include_once / require_once 和 function_exists 条件。

    例如

    if ( ! function_exists( 'my_function' ) ) :
    
    function my_function() {
    
    }
    
    endif;
    

    【讨论】:

    • 另一个选项是命名空间。
    • @u_mulder 原始函数不能在 PHP 中命名。
    【解决方案3】:

    最好的方法是使用 PHP 的 OOP features,它允许您指定方法的可见性。

    【讨论】:

    • 我实际上正在寻找一种限制它们的方法。
    【解决方案4】:

    你可以在函数中检查是否包含“主文件”,试试这样:

    function someFunction() {
        if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) {
            echo "Not included.";       
        } else {
            echo "Included. No access.";
        }
    }
    

    或者将条件放在函数定义的“外部”,这样如果你包含那个文件就不会定义它。

    但我会采用 OOP 方法。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多