为什么以下代码在 php7 能执行但是 php5.6 下却不可以?

2017-11-01 21:33:29 +08:00
 waibunleung
php 代码:
<?php
class User
{
public $username;

public function __construct(string $username)
{
$this->username = $username;
}
}

$users = [
new User('user 1'),
new User('user 2'),
new User('user 3'),
];

$usernames = array_column($users, 'username');
var_dump($usernames);

//在 php7 执行以上代码能得到想要的输出,
//但是在 php5.6 执行时先提示 Argument 1 passed to User::__construct() must be an instance of string, string given 的错误
//把构造方法的 string 去掉之后 输出的却是一个空数组
//所以很奇怪 php7 相较于 php5 来说内部究竟发生了什么变化致使 php7 能得到预想的输出呢?

望各位赐教...小弟刚转 php7
3726 次点击
所在节点    程序员
12 条回复
carlclone
2017-11-01 21:38:39 +08:00
你是来黑 PHP 的吧
wdlth
2017-11-01 21:45:43 +08:00
Changelog ¶

Version Description
7.0.0 Added the ability for the input parameter to be an array of objects.

文档里面不是已经说了么……
ruchee
2017-11-01 21:49:46 +08:00
http://cn.php.net/manual/zh/migration70.new-features.php
http://cn.php.net/manual/zh/function.array-column.php

对应上面两个文档说明,原因分别是:
1. 类型声明 7.0 才支持
2. array_column 函数从 7.0 开始才支持对象数组
kendetrics
2017-11-01 21:55:15 +08:00
用了 7 独有的特性呗,多简单的事。。
lepig
2017-11-01 21:55:23 +08:00
楼主的例子不就是 Example #3 拷贝过来的么

完全不看文档。
oswuhan
2017-11-01 22:04:52 +08:00
这种水分大的问题,直接去 https://segmentfault.com/上问,同道中人很多
shiny
2017-11-01 22:07:52 +08:00
小提示,PHP 文档里的代码会随 PHP 升级而发生变动。
HYSS
2017-11-01 22:13:46 +08:00
又来黑 php
49gd
2017-11-02 08:17:53 +08:00
日常黑 php
WytheHuang
2017-11-02 09:12:22 +08:00
麻烦看一下文档再来问好吗?
http://php.net/manual/zh/migration70.php
checgg
2017-11-02 09:55:11 +08:00
日常黑 php..........
mortence
2017-11-02 10:01:11 +08:00
这。。。。。提示都有了,直接搜提示或者翻译一下应该就能猜到问题吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX