ホームページ >バックエンド開発 >PHPチュートリアル >非静的関数に直接アクセスできるのはなぜですか?

非静的関数に直接アクセスできるのはなぜですか?

WBOY
WBOYオリジナル
2016-06-20 12:26:28933ブラウズ

今日 Discuz のコードを見ると、次のコードがありました:

class DB{	function table($table) {		return DB::_execute('table_name', $table);	}	function _execute($cmd , $arg1 = '', $arg2 = '') {		static $db;		if(empty($db)) $db = & DB::object();		$res = $db->$cmd($arg1, $arg2);		return $res;	}}


理解できないのは、_execute メソッドが静的メソッドではないということです。なぜ直接実行できるのでしょうか。 DB::_execute を使用しますか?
私が自分で書いたクラスでは、クラス名::メソッド名を通して直接アクセスする前にメソッドを静的に設定する必要があります?
アドバイスをお願いします、ありがとうございます。


ディスカッションへの返信 (解決策)

エラー検出のレベルが違うだけです

class T {  function foo($s) {    echo $s, PHP_EOL;  }}T::foo(123);error_reporting(E_ALL ^ E_STRICT);T::foo('abc');

そのような DB クラスはありません
sourceclassclass_core.php の最後の行のみ
class DB extends discuz_database {}

お使いのバージョンがわかりません

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。