PHP Предотвращение создания атрибутов, не определенных в классе

<?php //Simple object to keep track of an Article class ArchiveArticle { public $timestamp; public $filename; public $slug; public $category; public $status; public $pubdate; public $ranking; public $newsgate_state; public $newsgate_story_id; public $newsgate_budget_id; public $newsgate_text_id; public $newsgate_profile; public $taxonomy; public $overline; public $net_title; public $headline; public $teasertitle; public $teasersummary; public $subhead; public $summary; public $byline_name; public $dateline; public $paragraphs = array(); public $more_infos = array(); public $shirttail; public $images = array(); } $obj = new ArchiveArticle(); $obj->foo = 'bar'; //How can I stop this? ?> 

В ваш класс добавьте:

 public function __get($name) { return NULL; } public function __set($name, $value) { } 

Объяснение: эти два метода будут перехватывать любой доступ к несуществующей и / или защищенной / частной собственности, также предотвращая его создание, если оно не существует.

См. Также http://php.net/manual/en/language.oop5.magic.php

В соответствии с предложением @DCoder вы также можете:

 public function __get($name) { throw new Exception("Property $name cannot be read"); } public function __set($name, $value) { throw new Exception("Property $name cannot be set"); }