相关疑难解决方法(0)

严格标准:只应通过引用传递变量

$el = array_shift($instance->find(..))
Run Code Online (Sandbox Code Playgroud)

上面的代码以某种方式报告了严格的标准警告,但这不会:

function get_arr(){
    return array(1,2);
}
$el = array_shift(get_arr());
Run Code Online (Sandbox Code Playgroud)

那么它什么时候会报告警告呢?

php reference strict

81
推荐指数
3
解决办法
16万
查看次数

括号改变函数调用结果的语义

另一个问题中指出,在括号中包装PHP函数调用的结果可以某种方式将结果转换为完全成熟的表达式,以便以下工作:

<?php
error_reporting(E_ALL | E_STRICT);

function get_array() {
   return array();
}

function foo() {
   // return reset(get_array());
   //              ^ error: "Only variables should be passed by reference"

   return reset((get_array()));
   //           ^ OK
}

foo();
Run Code Online (Sandbox Code Playgroud)

我试图在文档中找到任何内容,以明确无误地解释这里发生的事情.与C++不同,我不太了解PHP语法及其语句/表达式的处理方法,以便自己派生它.

有关此行为的文档中是否隐藏了任何内容?如果没有,其他人可以解释它而不诉诸假设吗?


更新

我首先发现这个EBNF声称代表PHP语法,并试图自己解码我的脚本,但最终放弃了.

然后,使用phc生成.dot两个foo()变体的文件,我使用以下命令为两个脚本生成 AST图像:

$ yum install phc graphviz
$ phc --dump-ast-dot test1.php > test1.dot
$ dot -Tpng test1.dot > test1.png
$ phc --dump-ast-dot test2.php > test2.dot
$ dot -Tpng …
Run Code Online (Sandbox Code Playgroud)

php php-internals

52
推荐指数
1
解决办法
2364
查看次数

如何在PHP 5.3中的单行元素数组中获取没有严格警告的值

给定一个返回数组的函数;

function return_me_an_array() {
  return array('my_value');
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能调用它并以优雅的方式从数组中获取单个值(是,先,最后还是仅)(是的,我知道这是PHP!)

如果我这样做

$var = reset(return_me_an_array());
Run Code Online (Sandbox Code Playgroud)

我得到以下PHP严格错误:

严格警告:只应通过引用传递变量

同样,每个都给出相同的警告.

$var = array_shift(return_me_an_array());
$var = array_pop(return_me_an_array());
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

$temp = return_me_an_array();
$var = $reset($temp);
Run Code Online (Sandbox Code Playgroud)

但是必须在两个陈述中做到这一点非常可怕.

有没有办法做到这一点?

从表面上看,这类似于如何返回一个数组并在PHP中的一行中获取它的第一个元素?但接受的答案使用reset- 所以我认为这是不同的; 我要么找一个没有严格警告的解决方案,要么被告知我想要的是不可能的.

我也知道PHP 5.4引入了数组解除引用(例如return_me_an_array()[0])但是我目前正在使用5.3.

关闭后编辑:这是如何过于本地化?这是关于如何编写优雅的PHP的一般问题.或者是这样的情况,很少有人关心优雅的PHP它是"一个非常狭窄的情况,通常不适用于全球互联网用户"?

php arrays

2
推荐指数
1
解决办法
279
查看次数

标签 统计

php ×3

arrays ×1

php-internals ×1

reference ×1

strict ×1