PHP 的两种 new 有啥区别啊

2021-03-23 15:25:27 +08:00
 xxbutoo
class A
{
	function f()
	{
		return 2;
	}
}
/* exp1 */
$a = new A();
var_dump($a->f());
/* exp2 */
var_dump((new A)->f());

第二种语法糖 官网有文档 但是都是英文滴 也没看懂啥区别 谷歌嘛也找了找 没找到答案 v2 有大佬讲解下嘛

2562 次点击
所在节点    PHP
14 条回复
Jat001
2021-03-23 15:30:47 +08:00
这不是没区别吗……你都说语法糖了,让你少写个赋值
第二个示例写错了吧,应该是 var_dump((new A())->f());
kosgug
2021-03-23 15:32:40 +08:00
这不就是 `new A()` 和 `new A` 的区别,所以就是是否要往里边加参数的区别,没参数一样
xxbutoo
2021-03-23 15:35:22 +08:00
@Jat001 没错额 就是这么写的
当然 (new A())->f(); 也可以
xxbutoo
2021-03-23 15:35:46 +08:00
@kosgug emmm 那就是没参数就直接 new A 了
RickyC
2021-03-23 15:37:10 +08:00
new 对象时, ()里的参数对应的是构造函数的参数;

构造函数不需参数, 则不用带括号.

示例如下:

```
<?php

class A
{
function __construct($name)
{
echo 'hi' . $name;
}


function f()
{
return 2;
}
}

$a = new A('Tom');
var_dump($a->f());

$b = new A; //报错
var_dump($b->f());

$c = new A(); //报错
var_dump($c->f());

```
xxbutoo
2021-03-23 15:39:47 +08:00
@RickyC 谢谢你 我好像明白了
我还是比较喜欢第二种写法一点
Jat001
2021-03-23 15:41:13 +08:00
@xxbutoo #3 好多年不写 php 了,年轻时我也喜欢各种语法糖,觉得简便,现在我只求各种语法糖越少越好,一是用过的语言太多了,根本记不住这种细节,二是编码风格不统一,没了语法糖,虽然选择少了,但至少不是一个人一种代码风格了
kosgug
2021-03-23 17:05:31 +08:00
@Jat001 所以 go
kosgug
2021-03-23 17:08:09 +08:00
@Jat001 当我写这段代码时候心情就很复杂
```
a := b
if a != nil {
a = c
}
```
falcon05
2021-03-23 17:08:35 +08:00
区别是第二种变量不能复用了呗
xxbutoo
2021-03-23 19:41:02 +08:00
@Jat001 哈哈 大叔好
xxbutoo
2021-03-23 19:41:26 +08:00
@falcon05 姐姐你说的对哦- -这也算是一种吧
Rache1
2021-03-24 09:15:23 +08:00
@RickyC PSR-12 中要求了 new 对象时,无论构造函数是否有参数都必须加上括号。
lyhiving
2021-04-29 22:22:00 +08:00
最讨厌研究这个的,都是小细节,少个字符真会省很多么?
PHP 语法尽量标准写就是了,凡是考这个题目的基本上都不会太总是业务逻辑

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

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

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

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

© 2021 V2EX