【问题标题】:PHP protected variable [closed]PHP保护变量[关闭]
【发布时间】:2013-08-10 01:21:40
【问题描述】:

有没有办法让一个变量被保护并且不能覆盖到 php 中?

ps:不在课堂或定义中。

例如;

<?php
$var ="something";
$var ="test";
echo $var;
?>

我希望这段代码返回“某物”而不是“测试”。

你对此有什么想法吗?

【问题讨论】:

  • 不,这只能在课堂上完成,你能告诉我们你为什么不想使用定义吗?使用定义时有什么问题吗?
  • 不,实际上没有必要这样做。只需使用常量即可。
  • 什么,你正在寻找一个不应该改变的“变量”......??? !!!
  • 唯一有用的方法是如果您“意外”更改了值,这意味着您应该修复真正的错误,而不是在变量前面加上“受保护”之类的东西
  • 总结一下每个人都想告诉你的:不,变量是可变的,这是不可能的,你试图解决错误的问题。

标签: php variables protected


【解决方案1】:

您可以使用函数来模拟该行为:

function var() {
  return "something";
}

但如果您不想改变“变量”,请使用常量。

【讨论】:

    【解决方案2】:

    从技术上讲,您可以使用辅助函数和 global (yuck) 关键字,但 classes/define 要好得多(但您仍然必须使用函数并将所有 $var = "something" 行更改为 @ 987654325@):

    <?php
        set_var("something");
        set_var("test");
    
        var_dump($var); //string(9) "something"
    
        function set_var($newVar) {
            static $varIsSet;
    
            global $var;
    
            if (!$varIsSet) {
                $var = $newVar;
                $varIsSet = true;
            }
        }
    ?>
    

    DEMO

    【讨论】:

    • 嗨,谢谢,但是当我使用 $var="test";它不再工作了。
    • @merdincz 不,因为正如我所写,您需要使用set_var。除非您创建自己的 PHP 编译器,否则您不能更改 $var=something 的工作方式。改变你的逻辑并使用常量,而不是试图解决其他地方的问题。
    • 我不能对所有变量使用 set_var 函数。
    • @merdincz 然后听听大家怎么说,然后改变你的逻辑。 为什么你不能使用define?如果您向我们展示实际问题是什么,我们可以帮助您想出一个解决方法,而不是更改 PHP 源代码并创建您自己的修改版本。
    【解决方案3】:

    这将违背变量的全部意义

    变量的全部目的是它的值是可变的,它可以在程序的后面改变。

    我可以用什么代替?

    但你可以使用constant:

    // Works on PHP 5.3.0 and later
    const SOME_CONSTANT = "Some value.";
    

    或

    // Far more well known, works on older PHPs, does the same thing
    define("SOME_CONSTANT", "Some value");
    

    如何使用常量?

    然后像使用变量一样使用它:

    echo SOME_CONSTANT;
    

    您可以通过几乎任何可以使用变量的方式来使用常量,只是传统上您会为常量使用大写名称(这在 PHP 中不强制)并且它不会以 @ 开头987654325@ 符号(这是强制执行的)...哦,当然,您不能重新分配它。

    注意:因为使用 const 关键字定义的常量是在编译时定义的,所以您不能在循环结构、if 语句、switch 语句等中使用此语法,而必须使用 define() .

    【讨论】:

    • "ps:不在课堂或定义中。"
    • @h2ooooooo 对,正如所解释的,答案是否定的。
    • 我同意 - OP 不想使用 define 或一般常量真的很愚蠢 - 我只是指出它以防你错过它。 :-)
    • @h2ooooooo 如果他使用较新的 PHP(5.3 或更高版本),他可以在课堂外使用 const。
    • 我今天学到了一些新东西 - 仍然 - 改变 OP 的唯一方法是,如果这是一个你可以使用的求职面试/家庭作业问题变通方法。 (就像“不使用循环打印数字 0-100” - psst - 递归函数),但除此之外,const 的 OP 应该有与 define 等相同的“问题”。我的猜测是 OP 期望在变量周围放置一个魔术词,因此他不需要修复其余的错误代码(基本上是创建难以在逻辑上遵循的代码)。
    猜你喜欢
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2010-11-12
    相关资源
    最近更新 更多