公司还是不推荐用python,只好屈服使用php,不过用python习惯了,真是发现有些地方不适应,今天写了一段代码,语法检查怎么都通不过,特地放在这里,希望有朋友能指点一下。 代码如下:
function get()
{
$arr = array(
1,2,3
);
return $arr;
}
$y = get()[1];
echo $y;
执行会报如下错误:
Parse error: syntax error, unexpected '['
一开始我还以为又是少写';'之类的问题,仔细检查未果,所以把代码拆成两行,变成:
$y = get();
$y = $y[1];
居然执行成功了! 于是我不解了,为什么连c++都支持的语法,而php里面却不肯支持? c++的代码如下:
vector<int> foo()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
return vec;
}
int main(int argc, char **argv)
{
cout << foo()[1] << endl;
return 0;
}
更不用说python:
def foo():
return [1,2,3]
print foo()[1]
代码都可以正确执行。 在公司问了校友那边的同事,也是没有人知道为什么php不给与支持。 其实按照我的理解,语法上支持连缀应该是一种简约化的趋势,包括python的django,jquery,其实都在使用连缀。 有的朋友可能说,这样出错了不好定位,如果是在C中,我承认的确如此,因为需要通过错误返回码来进行错误定位;但是像python这种高级语言有着“异常”强大的支持,异常捕获完全可以替你完成这件事情。 OK,就是这样~其实并不是说php不好,php这样设计必然也有他的原因,我只是想弄清楚原因是什么。
leeon on #
php的一些编码规则还是比较蛋疼的,改造成这样也省了一次变量转换:
function get($i)
{
$arr = array(
1,2,3
);
return $arr[$i];
}
Reply
Dante on #
是够纠结的。。。
Reply
依云 on #
完了,这样一来我更不想学 PHP 了。。。
Reply
Dante on #
今天又发现php一个json_encode的问题。。唉,没办法,非学不可啊。。
Reply
星光居士 on #
连腾讯都不鼓励用python,这说明了很多问题,也回答了很多问题
Reply
Dante on #
嗯,其实这也可以理解,毕竟团队的沉淀是很重要的,突然转向一种不熟悉的语言带来的规范,积累,招聘等问题都会很多。
Reply
笨猫猫 on #
我汗~ 星光兄,我们居然发现你了。
-_-!
Reply
星光居士 on #
看来大家都是vim的人啊
Reply
tkdchen on #
说明什么问题了?
回答什么问题了?
Reply
星光居士 on #
呵呵,意会啊意会啊
Reply
挖路 on #
:-)
各个语言间的语法差异是肯定的,你得包容的看待这个问题啊。
我刚学python的时候就为了他把列表和字典搞成两个类型而郁闷了老久,在php里,一个array就搞定一切了。
Reply
Dante on #
其实如果有原因的话,也不是不能接受,关键是实在想不通。。如果array看作一个对象的话,那[]操作符无非是他的一个成员函数,既然php中的对象可以这么用,没道理array就不可以嘛。。。
Reply
依云 on #
Python 是注重效率的语言,所以 list 和 dict 肯定得分开了,一个是用动态数组实现的,另一个是 hash 表。而且,如果不分开的话,for..in 的时候你就要郁闷了(我就对 Javascript 的 for in 应用于数组时很不爽)。
Reply
Dante on #
确实如此,感觉php把两个array统一之后,很多东西被掩盖掉了,比如其关联数组中的key还是能够记住原来顺序:
<pre lang="php" line="1">
$arr1 = array(
'x'=>1,
'y'=>2,
);
var_dump($arr1);
$arr2 = array(
'y'=>2,
'x'=>1,
);
var_dump($arr2);
</pre>
输出结果是:
<pre lang="txt" line="0">
array(2) {
["x"]=>
int(1)
["y"]=>
int(2)
}
array(2) {
["y"]=>
int(2)
["x"]=>
int(1)
}
</pre>
而对python或者stl的map,就会都变成有序的。
Reply
sophiasmth on #
原因就是PHP很2
Reply
narky on #
PHP其他都还好,就是这个比较纠结。
泥马连ASP都能支持部分连缀,有木有!!!
比如:conn.execute("select top 1 username from table where id=1")(0)
Reply
WILDEN气动隔膜泵 on #
PHP我不熟……不发表意见哈。
Reply
全恒壮 on #
PHP确实不能这么用。取得数组第1个元素,有时会借助一个函数 current(get());。为什么这么设计就想不通了,或许就是PHP的一个缺陷吧,另外PHP函数返回值类型本来是不确定的,直接这样用不好吧。
Reply
terrysco on #
每个脚本语言都有自己的习惯,与其深究于这种小问题,不如多花点时间在PHP架构上。
Reply
Dante on #
呵呵,见仁见智。
Reply
qq on #
原来vimer.cn还是公司同事的.从oa上点过来的:)
Reply
Dante on #
呵呵是啊~~
Reply
流年 on #
一开始也郁闷过,不过自己用的时候,返回的数组貌似多用于迭代,这样子保存临时变量反而更好一点。。
至于php为啥这样设计,倒也不知道
Reply
Jaylyn on #
I had no idea how to approach this befroenow Im locked and loaded.
Reply
无缺 on #
其实我个人不赞成那中一长串式的写法,而赞成把操作拆分开,这样操作粒度更细更容易控制,也更清楚。我觉得那种一长串的东西看着头疼...
仁者见仁啦,^_^。
Reply
Dante on #
哈哈,的确见仁见智~
在C、C++编程的时候,我也不会用连缀~ 在用django的时候就比较多
Reply
zjstandup on #
php中[]符号针对变量的
Reply
Dante on #
我的理解是,所谓的变量只不过是指向数据的一个指针。
所以还是说不通的……
Reply
seatle on #
不是不支持,是目前用的比较多的版本不支持,新出的5.3.3版本就支持了
Reply
seatle on #
像这种小功能,要弄太简单了,只是之前没人提交而已,一提交,PHP下个版本马上就支持了
Reply
iminto on #
php5.4支持了。
Reply
Dante on #
嗯,这样有些时候,语句就可以少几行了
Reply
istrone on #
PHP5.4支持这种用法了!
Reply
PHP学习 on #
博客文章都还好 欢迎回访http://www.iiwnet.com
Reply
a on #
php版本问题。低版本不支持。。
Reply