【问题标题】:PHP Append to empty string without errorPHP追加到空字符串没有错误
【发布时间】:2011-03-31 17:34:11
【问题描述】:

我遇到了以下问题,我的函数将代码附加到字符串 $string ($string .= bla),但一开始字符串为空,所以我收到此错误消息

遇到 PHP 错误
严重性:通知
消息:未定义变量:$string
文件名:libraries/file.php
行号:90

当然如果我提前定义了字符串,比如$string = NULL,就不会出现错误,但是 但我虽然可能有一种方法可以附加到字符串而无需提前定义变量/进行 !empty 检查。

应该只是一行的东西,我在找slim code。

谢谢。

【问题讨论】:

    标签: php string append


    【解决方案1】:

    它应该仍然可以工作,它只是解释器给你一个警告。如果需要,您可以在 php 中抑制警告:

    error_reporting(E_NONE);
    

    也就是说,通常最好先声明变量,并在测试时启用警告。

    【讨论】:

    • +1 - 这甚至不是警告,只是一个通知,没有警告那么严重。
    【解决方案2】:

    精简代码和删除所有通知级别错误通常不会齐头并进。如您所知,错误与使用未初始化的变量有关。不初始化就无法初始化。

    不过,我不会考虑 $string = ''; 膨胀。

    【讨论】:

    • 好吧,相比之下它确实 $string .= bla;与 $string = NULL; $字符串 .= bla;我通过 foreach 循环运行它,所以我必须在里面初始化它,因为实际上它是一个具有不同键的数组,所以我不知道所有使用的名称。
    【解决方案3】:

    第一次使用变量时只需执行“=”而不是“。=”

    $newVar = ""; //good
    $newVar2 .= ""; //bad 
    
    $newVar .= ""; //ok because of good line 
    

    【讨论】:

    • 谢谢,但我知道上面所说的所有事情。我知道为什么我会收到错误,我知道如何初始化并且我知道如何隐藏错误(尽管如 aove 所说,隐藏不是解决方案)。我只是想知道是否有一种方法可以将坏行写成好行。我想我必须采取丑陋的方式并进行初始化。不过还是谢谢。
    • 初始化不是“丑陋”的方式。这是正确的方式。初始化所有变量。习惯就好。
    【解决方案4】:

    isset() 相比并没有很大的改进,但您可能会喜欢Null-Coalescing-Operator

    $var = ($var ?? '') . 'some string'; 
    

    表达式 (expr1) ?? (expr2) 如果 expr1 为 NULL,则计算为 expr2,否则计算为 expr1。

    【讨论】:

      【解决方案5】:

      如果您真的想在一行中完成所有操作,请先检查变量。如果变量为null,则赋值,如果不为null,则追加。

      $more = "This is more text";
      
      $string = (($string == null) ? $more : $string . $more);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2012-02-05
        • 2015-08-20
        • 2019-08-07
        • 1970-01-01
        相关资源
        最近更新 更多