JoomlaコアとPHPについての知識はほとんどありません。私のウェブサイトをよりよく処理するために、私はjoomlaコアの小さな部分を読み込もうとしています。この関数_JTable:getInstance
_、(libararies\joomla\table\table.php line268)に遭遇すると、それは
_ return new $tableClass($db);
_
getInstance
が何を返すかを理解するには、この_$tableClass
_がどのように定義されているかを知る必要があるため、Webサイトのすべてのphpファイルで検索しました。 このページ が指摘する定義として、それらのどれも私が探しているものではありません。私はのようなものを期待しています
_class tableClass{...}
_
さらに、他のphpファイルには、次の行があります。
_$row = JTable::getInstance('K2Item', 'Table');
$row->hit($id);
_
だから私には見えます、getInstance
が返すものはhit()
のメンバーを持つオブジェクトであるはずなので、次のようなものを期待しています
_class tableClass{...
function hit(){
.....
}
}
_
しかし、この種のコードはどこにも見つからないので、私はここで立ち往生しており、間違いなく助けが必要です。
私の考えのいくつか:$ tableClassは本当にクラスですか?他のすべてのクラスにはない_$
_があることに気づきましたか?クラスではない場合、なぜこのように呼び出すことができますか_new $tableClass
_?私はこれらの基本を本当に理解する必要がありますが、キーワード_$
_をグーグル検索するのはちょっと難しいです。
$ tableClassは変数です。 「tableClass」という名前のクラスは見つかりません。これは、getInstanceメソッドの最初に生成される実際のクラス名のプレースホルダーにすぎません。
GetInstanceが始まる268行目から272行目を見てください。
_public static function getInstance($type, $prefix = 'JTable', $config = array())
{
// Sanitize and prepare the table class name.
$type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);
$tableClass = $prefix . ucfirst($type);
_
この最初の行は、後でgetInstanceに渡すことができるパラメーターを定義します。
_ $type The type (name) of the JTable class to get an instance of.
$prefix An optional prefix for the table class name.
$config An optional array of configuration values for the JTable object.
_
だからあなたが与えた例を見れば、
_$row = JTable::getInstance('K2Item', 'Table');
_
「K2Item」はJTableクラス($ type)の名前で、「Table」は接頭辞($ prefix)です。 [$ configはオプションであり、おそらくここでは必要ないため、設定されていません]
行271($type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);
)は、$ typeパラメーターからすべての無効な文字を削除します。つまり、文字(AZ)、数字(0-9)、および文字 '_'、 '。'、 'を除くすべての文字を削除します-'。 正規表現 を使用しています。
272行目で、$ tableClass(最後に確認するクラス名)が生成されます。 $ prefixを受け取り、前の行の$ typeを連結します。 ucfirst()は、$ typeの最初の文字を大文字に変換するためのものです。
いくつかの例:
_JTable::getInstance('K2Item', 'Table');
_
$ tableClassは "TableK2Item"になります
_JTable::getInstance('C#!ont&ent');
_
$ tableClassは、不正な文字の削除のためにJTableContentになり、$ prefixはデフォルトで「JTable」になります。