12

「new」という関数と「case」というクラスを作りたいと思っています。

PHPでそれを行うことはできますか?

4

6 に答える 6

29

実際には、そのようなメソッドを定義すると解析エラーが発生しますが、使用するとエラーが発生しないため、何らかの回避策が可能になります。

class A {
    function __call($method, $args) {
        if ($method == 'new') {
            // ...
        }
    }
}

$a = new A;
$a->new(); // works!

2004 年にさかのぼる関連機能のリクエストがまだオープンです。

2016 年 1 月の編集

PHP 7 以降では、 Context Sensitive Lexerのおかげで、これまで制限されていたキーワードを使用してメソッドに名前を付けることができるようになりました。

class Foo {
    public function new() {}
    public function list() {}
    public function foreach() {}
}

ただし、クラスCaseに名前を付けることはまだできません。

于 2011-07-26T16:05:15.570 に答える
29

いいえでき ません。ああ、助かった。

于 2011-03-14T12:25:39.283 に答える
2

それはできません。代替オプションは、関数名として _case() または _new() を使用することです

また、チェックアウト:

PHPでメソッド名を「エスケープ」して、予約済みのキーワードと衝突するメソッド名を持つことは可能ですか?

于 2011-03-14T12:28:26.657 に答える
1

デフォルトでは不可能です。これらは予約語であり、使用できません。

http://www.php.net/manual/en/reserved.keywords.php

目的を達成するためにPHPなどを再コンパイルできるかもしれませんが、(あなたに答えた他の人々のように)それは良い考えではないと思います:)

チッ!

于 2011-03-14T12:26:29.323 に答える
0

私の問題を克服するために、クラスの名前を変更しました。

foreach($array as $key => $line){
    if($key == "resource"){
        $key = "resources";
        $array->$key = $line;
    }
}
于 2019-05-10T13:06:16.347 に答える