Почему именно методы метода экземпляров модели CakePHP Model. Например:Модели CakePHP: почему методы экземпляра?
$post = $this->Post->findById($id);
в смену
$post = Post::find($id);
Я думаю, что все методы, которые работают на модельных экземпляров (или записи) будет методы экземпляра, например:
$post = ...;
$post->publish(); // Would be $this->Post->publish($id) using Cake
и все методы, которые создают или находят записи (которые работают с общей коллекцией записей), были бы методами класса (методы экземпляра), например:
$post = Post::findById($id); // Would be $this->Post->findById($id) using Cake
$newPost = Post::create(['title' => 'My post', 'body' => '<p>...</p>']);
// Would be $newPost = $this->Post->create([...]); using Cake
Я думаю, что это соглашение с Тортом противоречит логическим соглашениям ООП. Кто-нибудь знает причину этого дизайна?
Это почти наверняка, потому что каждая модель нуждается в возможности иметь индивидуальные настройки, и поэтому лучше, чтобы модель могла иметь состояние для хранения этих параметров. Например, отношения модели и правила валидации обычно используются параметрами, которые сильно варьируются между отдельными моделями. – Kai
Но как насчет статических переменных? Например: class Post extends Model { static $ validations = array (...); static $ принадлежитTo = 'Пользователь'; } – user1065745
Статические свойства не могут быть перезаписаны наследованием, и, конечно, все пользовательские модели в CakePHP наследуют от модели, поэтому это не будет работать. http://stackoverflow.com/questions/532754/inheritance-of-static-members-in-php – Kai