私は PHP を初めて使用し、PHP のバージョン (5.4.13) のバグである場合とそうでない場合がある奇妙な動作に遭遇しました。関数宣言で関数の引数の順序が問題になるケースを見つけました。次の例では:
class Book {
function __construct() { }
public static function withDescriptors($isNotOrmObject, $isArray, $isScalar) {
$instance = new self();
// initialization here
return $instance;
}
}
withDescriptors を呼び出すと、「配列から文字列への変換」例外が発生します。withDescriptors が呼び出されると、エラーがスローされます。withDescriptors が実際に実行されることはありません。ただし、オブジェクト パラメーターを配列パラメーターに切り替えると、問題が解決します。いえ
public static function withDescriptors($isArray, $isNotOrmObject, $isScalar){ ....
これは PHP の既知の特性ですか、それともバグですか?
より明示的に:
class Book {
function __construct() { }
public static function withDescriptors($isNotOrmObject, $isArray, $isScalar) {
$instance = new self();
// initialization here
return $instance;
}
}
$book = Book::withDescriptors($isNotORMobject, $isArray, $isScalar);
失敗し、
class Book {
function __construct() { }
public static function withDescriptors($isArray, $isNotORMobject, $isScalar) {
$instance = new self();
// initialization here
return $instance;
}
}
$book = Book::withDescriptors($isArray, $isNotORMobject, $isScalar);
素晴らしい作品。唯一の違いはパラメータ シーケンスです。「ここでの初期化」コードは同一です。