V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xxbutoo
V2EX  ›  PHP

PHP 的两种 new 有啥区别啊

  •  
  •   xxbutoo · 2021-03-23 15:25:27 +08:00 · 2580 次点击
    这是一个创建于 1370 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class A
    {
    	function f()
    	{
    		return 2;
    	}
    }
    
    /* exp1 */
    $a = new A();
    var_dump($a->f());
    /* exp2 */
    var_dump((new A)->f());
    

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

    14 条回复    2021-04-29 22:22:00 +08:00
    Jat001
        1
    Jat001  
       2021-03-23 15:30:47 +08:00
    这不是没区别吗……你都说语法糖了,让你少写个赋值
    第二个示例写错了吧,应该是 var_dump((new A())->f());
    kosgug
        2
    kosgug  
       2021-03-23 15:32:40 +08:00
    这不就是 `new A()` 和 `new A` 的区别,所以就是是否要往里边加参数的区别,没参数一样
    xxbutoo
        3
    xxbutoo  
    OP
       2021-03-23 15:35:22 +08:00
    @Jat001 没错额 就是这么写的
    当然 (new A())->f(); 也可以
    xxbutoo
        4
    xxbutoo  
    OP
       2021-03-23 15:35:46 +08:00
    @kosgug emmm 那就是没参数就直接 new A 了
    RickyC
        5
    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
        6
    xxbutoo  
    OP
       2021-03-23 15:39:47 +08:00
    @RickyC 谢谢你 我好像明白了
    我还是比较喜欢第二种写法一点
    Jat001
        7
    Jat001  
       2021-03-23 15:41:13 +08:00
    @xxbutoo #3 好多年不写 php 了,年轻时我也喜欢各种语法糖,觉得简便,现在我只求各种语法糖越少越好,一是用过的语言太多了,根本记不住这种细节,二是编码风格不统一,没了语法糖,虽然选择少了,但至少不是一个人一种代码风格了
    kosgug
        8
    kosgug  
       2021-03-23 17:05:31 +08:00
    @Jat001 所以 go
    kosgug
        9
    kosgug  
       2021-03-23 17:08:09 +08:00
    @Jat001 当我写这段代码时候心情就很复杂
    ```
    a := b
    if a != nil {
    a = c
    }
    ```
    falcon05
        10
    falcon05  
       2021-03-23 17:08:35 +08:00 via iPhone
    区别是第二种变量不能复用了呗
    xxbutoo
        11
    xxbutoo  
    OP
       2021-03-23 19:41:02 +08:00
    @Jat001 哈哈 大叔好
    xxbutoo
        12
    xxbutoo  
    OP
       2021-03-23 19:41:26 +08:00
    @falcon05 姐姐你说的对哦- -这也算是一种吧
    Rache1
        13
    Rache1  
       2021-03-24 09:15:23 +08:00
    @RickyC PSR-12 中要求了 new 对象时,无论构造函数是否有参数都必须加上括号。
    lyhiving
        14
    lyhiving  
       2021-04-29 22:22:00 +08:00
    最讨厌研究这个的,都是小细节,少个字符真会省很多么?
    PHP 语法尽量标准写就是了,凡是考这个题目的基本上都不会太总是业务逻辑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   878 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:00 · PVG 04:00 · LAX 12:00 · JFK 15:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.