同じ名前空間に同じ名前の 2 つのクラスを含めることはできません。
あなたがこれを持っている場合:
<?php
// App/Model/User.php
class User extends AppModel
この
<?php
// Plugins/MyPlugin/Model/User.php
class User extends MyPluginAppModel {
うまくいきません。
あなたはそれがうまくいくと思うかもしれませんが、何が起こるかというと、どのクラスが最初にロードされるか(そして、「このクラスはそのファイルを意味する」とキャッシュに入力されます)は、ロードしようとするユーザーモデルに関係なく使用されるものです/参照。これは、App/ClassRegistry クラスの動作にも組み込まれています。
$x = ClassRegistry::init('User');
$y = ClassRegistry::init('My.User');
$z = ClassRegistry::init('Other.User');
$x === $y === $z
上記は、それらがすべて in のクラスのインスタンスであることを意味するものではありませんapp/Model/User.php
。アプリケーション コードの残りの実行順序によっては、それらのいずれかの疑似ランダム インスタンスになります。
解決
唯一の解決策は、名前の競合がないように異なるクラス名を使用することです。
<?php
// Plugins/MyPlugin/Model/MyPluginUser.php
class MyPluginUser extends MyPluginAppModel {
これはモデル クラスだけに影響するのではなく、アプリケーション内のすべてのクラスに影響することに注意してください。