by ryou

PHPではlistが予約語という話

びっくりした。

以下のコードはPHP7以前ではエラーとなる

<?php

class MyCollection
{
  private $collection = [];

  public function list()
  {
    foreach ($this->collection as $item)
    {
      echo $item . PHP_EOL;
    }
  }

  public function push($item)
  {
    array_push($this->collection, $item);
  }
}

$myCollection = new MyCollection();
$myCollection->push('new item');
$myCollection->list();

実行結果は

Parse error: parse error, expecting `"identifier (T_STRING)"' in /Users/admin/work/php_list/main.php on line 7

メンバ関数の「list」を「showList」とかに変更したら動いた。
listとか割りと普通にメンバ関数名として使用したくなる名前なので辛そう。

PHP7だと「class」を除き予約語もメンバ関数名として使えるようになったらしいので、PHP7以降なら多分大丈夫(未確認