Posted at
CakePHPDay 7

amはarray_mergeのエイリアスではない

am関数は、CakePHP3では削除されています。

参考:CakePHP各バージョンのグローバル関数

CakePHP 1.3

https://book.cakephp.org/1.3/ja/The-Manual/Developing-with-CakePHP/Global-Constants-and-Functions.html#am

CakePHP 2.0

https://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html

CakePHP 3.0

https://book.cakephp.org/3.0/ja/core-libraries/global-constants-and-functions.html

ですので、CakePHPを最新バージョンにするのであれば、am関数は使えなくなります。

置き換えるなら、array_merge関数になるでしょう。

http://php.net/manual/ja/function.array-merge.php

しかし、am関数をarray_merge関数に置き換えるときは、引数に配列以外(特にnull)が入るパターンがないか確認が必要です。

am関数の内容は以下の通り。

function am() {

$r = array();
$args = func_get_args();
foreach ($args as $a) {
if (!is_array($a)) {
$a = array($a);
}
$r = array_merge($r, $a);
}
return $r;
}

引数が配列でなければ配列に変換する処理があります。

この処理に頼った実装をしていると、array_merge関数に変換したときにエラーとなる可能性があります。