26679


**インスタンス生成は、「new A()」だけではなく「new A」でも可ということを、ドキュメントで確認したいのですが…**  
・どこかに記載されているでしょうか？  
・()は必須？

<http://php.net/manual/ja/language.oop5.basic.php>

* * *
[code]

    class A
    {
    }
    
    new A();
    
    new A;
    
[/code]


CC BY-SA 3.0
2016-06-10T14:54:44.603
26628
2016-06-12T15:36:41.560
7886
question
php
オブジェクトを生成する際、クラスの後の()を省略できたと思うのですが…


私はこの省略記法を知らなかったので調べてみましたが、公式ドキュメントには「省略できる」との記述は見当たりませんでしたね…。  
ただし公式ドキュメント内のExampleコードにおいては省略した記法が多用されているため、そのようなことはできるようです。  
(実は`()`をつける場合ついても明確な記載は見つけられなかったのですが…)

`php new without brackets`とGoogleで検索すると本家Stack
Overflowの質問がいくつもヒットし、その中では`()`つきの場合と全く同じとみなして構わないといった回答がついているようです。

明確さのない良くない回答ですが、もし参考になれば。


CC BY-SA 3.0
2016-06-12T07:44:46.643
26673
2016-06-12T07:44:46.643
16821
26628
answer


※PHPは使用したことがないので見当はずれな回答でしたら済みません

`new`に関する言語仕様は下記のリンクかと思います。

Specification for PHP - The new Operator  
<https://github.com/php/php-
langspec/blob/a610388d637b67294925d3b1dbbc0a54b7d94428/spec/php-spec-
draft.md#the-new-operator>

**Syntax**

[code]

      _object-creation-expression:_
        new  _class-type-designator_  (  _argument-expression-list opt_  )
        new  _class-type-designator_
    
[/code]

**Semantics**

> The object is initialized by calling the class's constructor (§§) passing it
> the optional argument-expression-list. If the class has no constructor, the
> constructor that class inherits (if any) is used. Otherwise, each instance
> property takes on the value NULL.

コンストラクタの`argument-expression-list`はOptionalなので省略可能で、`()`も省略可能です。

引数(括弧)なしのコンストラクタでインスタンス化すると、各インスタンスプロパティは`NULL`で初期化されます。  
(引数なしのコンストラクタ内で明示的に初期化されない限り)

言語仕様に例として書かれている`Point`クラスではデフォルト値に`0`が指定されているため、コンストラクタの引数(括弧)を省略した場合、`$x`と`$y`が`0`で初期化されます。

[code]

    class Point 
    {
      public function __construct($x = 0, $y = 0) 
      {
        ...
      }
      ...
    }
    $p1 = new Point;     // create Point(0, 0)
    $p1 = new Point(12);   // create Point(12, 0)
    
[/code]

* * *

> ちなみにですが、このページはどういう位置付けに該当するページなのでしょうか？

git.php.net: Git Repository ¶  
<https://www.php.net/sites.php#git>

> The Git repository is also mirrored on GitHub, for those who would prefer to
> use GitHub's interface.

<https://github.com/php> は <http://git.php.net/>
のGitリポジトリをGitHub上にミラーしてるOrganizationです。

php-langspecは、PHP言語仕様 を 実装仕様(実装依存)
から明確に分離することを目的に作られたドキュメントのようです。(PHP言語界隈に明るくないため詳細は不明です)

**参考リンク**

PHPの今とこれから2014  
<http://www.slideshare.net/hirokawa/php2014-40144066/23>


CC BY-SA 3.0
2016-06-12T09:49:23.797
26679
2016-06-12T15:36:41.560
2023-11-17T20:01:02.963
-1
3068
26628
answer