3

わかりました、これは非常に予想外であり、それは私を悩ませます。すべてのクラスにdefault()という関数があります。でも、どういうわけか呼べません。これは、switchステートメントの「default:」が原因だと思います(これはまったく使用していません)。

これは、phpで関数default()に名前を付けることができないということですか、それとも何か間違ったことをしているのですか?

エラーは次のとおりです。

Parse error: syntax error, unexpected T_DEFAULT, expecting T_STRING in 
C:\Users\Jinxed\Desktop\WebTrgovina\app\c\Controller.c.php on line 8

そして、これが問題のコードです:

<?php
abstract class Controller {
    protected $view;
    function __construct() {
    }
    abstract function default();
    function getView(){
        return $this->view;
    }
}

defaultの名前を別の名前に変更するとコードは正常に機能しますが、これは面倒です。default()という名前の関数を使用するための解決策はありますか?

4

5 に答える 5

8

defaultPHPの予約語です。

リストは次のとおりです:http ://www.php.net/manual/en/reserved.keywords.php

于 2012-05-01T09:39:10.290 に答える
7

予約語を類関数として使用することはできません。ただし、__ callを使用することはできます

<?php
abstract class Controller {

    public function _default($some, $args) {}

    public function __call($name, $arguments) {
        if ($name === 'default') {
            //return call_user_func_array(array($this, '_default'), $arguments); // has args
            return $this->_default(); // simpler
        }
    }
}

それはあなたがすることを可能にするでしょう$foo->default()。ただし、メソッド名に予約語を使用することに依存する実装/APIを選択しないことをお勧めします。

于 2012-05-01T09:49:52.240 に答える
3

予約キーワードのリストに載っているので、予想外のことは何もありません。これらの名前が本当に必要な場合は、次を使用できます__call。例については、キーワードページのコメントを参照してください。

于 2012-05-01T09:39:25.807 に答える
2

はい、という名前の関数を持つことはできませんdefault。迷惑ですが、それはPHPです。

于 2012-05-01T09:38:44.580 に答える
0

AD7sixの回答に貢献したいと思います(これはコメントですが、できません)。PHPDocをサポートするIDEを使用している場合は、クラス宣言の前にこれを追加して、オートコンプリートにこれらの偽のメソッドが存在することを知らせることができます。 。

/**
 * show off @method
 * @method whateverItReturns default()
 */
class foo {
...
于 2015-11-16T02:13:53.460 に答える