我似乎无法弄清楚这一点.我有一个.dot文件,根据语法有效.如何使用graphviz将其转换为图像?
(注意我在Windows上,而不是linux)
请帮我把这个伪代码翻译成真正的PHP代码:
foreach ($arr as $k => $v)
if ( THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
doSomething();
Run Code Online (Sandbox Code Playgroud)
编辑:数组可能有数字或字符串键
我正在参加软件测试的毕业班,我们花了整整一堂课来研究故障,错误和失败之间的区别.我对测试中软件故障的定义不满意.你的定义是什么?
看看这段代码:
$last = end($p = explode('/', $someString));
Run Code Online (Sandbox Code Playgroud)
得到这个通知:
只应通过引用传递变量
我真的很困惑,因为它$p是一个变量.
我一直在寻找这个,但只发现了"这是一个有效的技巧"的行,但从来没有解释过.
在以下代码中:
error_reporting(-1);
ini_set("display_errors", 1);
end(array_flip($_GET));
end((array_flip($_GET)));
Run Code Online (Sandbox Code Playgroud)
第一次打电话end()通知结果:
严格的标准:只有变量应该在第3行的/home/john/www/test/dp.php中通过引用传递
下一个array_flip($_GET)附带的内容()不会引起任何投诉.
我理解通知的原因,严格标准是什么,"通过引用传递"意味着什么,并end()接受对数组的引用作为其参数.(必须的,因为它会影响原来的.)我担心的是,为什么它的工作原理.周围是否()创建了一个临时变量,或者这只是以某种方式欺骗PHP解析器?如果它确实创建了一个临时变量(并且通过设计这样做),那么这应该是安全的,但是如果它是一个欺骗解析器的黑客,那么它可能会在未来的PHP版本中破坏.(我碰巧在PHP版本5.4.36-0 + deb7u1上)
请注意,我不确定我是否喜欢这种结构,即使它是安全的(很容易看不到它,而其他人可能不知道为什么会这样),但是当功能可以很方便时,它通常很方便易读.像这样串起来.
我正在寻找适用于php(至少5.2)的现成语法和解析器,理想情况下是一种可以将php代码解析为可读AST(例如xml)的实用程序/库。解析器本身不必用php编写,源语言无关紧要。
该函数parse_users返回一个数组.
我在另一个函数中执行以下操作:
return reset($this->parse_users($records));
Run Code Online (Sandbox Code Playgroud)
但我得到了一个 Strict Standards: Only variables should be passed by reference in...
是因为我reset()在功能上做了吗?
我必须这样做:
$users = $this->parse_users($records);
return reset($users);
Run Code Online (Sandbox Code Playgroud)
还是别的什么?
extract(some_function_that_returns_array());
工作良好.
但是在php.net上它说第一个参数必须是一个引用的变量:http://php.net/manual/en/function.extract.php.这是一个错误吗?
function foo(&$array){}
function lol(){ $arr = array(); return $arr; }
foo(lol());
Run Code Online (Sandbox Code Playgroud)
显示"严格标准:只有变量应通过引用传递给......"
提取物不会发生这种情况
end(array_keys(array(0)))说PHP Strict standards: Only variables should be passed by reference(http://3v4l.org/CNLVT)
end((array_keys(array(0))))另一方面,只是工作(http://3v4l.org/168fi).为什么?
VLD反编译器显示正在运行的相同操作码,唯一的区别在于ext列,但我无法找到有关这意味着什么的文档.
给定一个返回数组的函数;
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它是"一个非常狭窄的情况,通常不适用于全球互联网用户"?
Can't use function return value in write context在尝试empty(strip_tags($string))使用三元语句中的条件作为赋值时,我得到了错误.所以为了测试,我摆脱了任务和三元语句.但是,当它显然不在写入上下文中时,我仍然会收到此错误.
想想看,我不确定是什么write context意思 - 我认为这与作业有关,但我不能说我肯定知道.
为什么这不能像我认为的那样工作?这对我来说似乎很直截了当.我错过了什么?
$ cat test.php
<?
$string = "<br/>";
if ( empty(strip_tags($string)) ) {
echo "It's empty.\n";
} else {
echo "It's not empty.\n";
}
$ php test.php
PHP Fatal error: Can't use function return value in write context in test.php on line 5
Run Code Online (Sandbox Code Playgroud) 在PHP中,我有以下构造
$a = array(-1 => '-', 0 => '?', 1 => '+')[1];
Run Code Online (Sandbox Code Playgroud)
这给出了语法错误.是否仍然可以在一个方便的行中执行此类操作,避免多个if/else clases或switch/select语句?我正在考虑在python这里工作正常:
a = {-1:'-', 0:'?', 1:'+'}[1]
Run Code Online (Sandbox Code Playgroud) 假设我们有2个函数.首先返回一个包含0..N元素的数组,第二个返回只需返回第一个元素或者NULL如果没有任何元素.
假设我们有这样的代码:
/**
* return stdClass[]
*/
function foo()
{
return ...;
}
/**
* return stdClass|null
*/
function bar()
{
$arr = foo();
if ($arr) {
return $arr[0];
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,执行起来bar()很无聊.
如果我使用.NET然后我会使用arr.FirstOrDefault()方法,它将完美地适合任务.
什么是在PHP中最优雅的方式?
PS:不接受产生任何警告或通知的答案.以及@用于抑制错误的那些