我使用CakePHP 2.9.8来开发一个7年前编写并开发到现在的旧应用程序。 不幸的是,第一个开发人员在CakePHP的库中添加了一些代码,并且为了迁移到CakePHP的第3个版本,我需要在应用程序中传输更改。
其中一个更改位于位于App::load
的{{1}}中,因为它使用了~\lib\Cake\Core\App.php
,我可以编写一个扩展static::_map($file, $className, $plugin);
并重写{{1}的类功能。
我的问题:
可以覆盖受保护的函数或属性吗? 如果没有:
为什么在CakePHP中它们被用作(或称为)App.php
,例如_map
,但定义为static::
如果是的话:
在我的应用程序中,我应该定义扩展App的类Foo和我想删除开发人员更改的static::_map($file, $className, $plugin);
函数,我应该在哪里编写Foo :: load?。
我还在这里放了protected static function _map($file, $name, $plugin = null)
函数:
load
答案 0 :(得分:1)
你在php中对OOP有一些严重缺乏知识。仔细阅读这些链接,他们会给你答案,希望对这两个主题有一个完整的理解。
还有很多与SO相关的问题和答案。如果手册不够,只需搜索它们。
第三,没有固定的地方。只需将其放在应用内的Lib
或Utility
文件夹中即可。但是,我会选择内置App
内容的自动加载器,只需使用uses
即可使我的课程可用。如果您的应用尚未使用composer,只需添加它并使用其自动装配器和命名空间即可。 2.x仍未使用它们的唯一原因是向后兼容性。 App
是一个在不实际使用它们的情况下完成命名空间功能的拐杖。