我是因为在做项目的时候发现方法应该写在另一个类里,于是从权限类,拷贝到了菜单类里,但执行的时候竟然发现了这个问题……
很多人都不知道可以这样用,事实上我也认为这样会搞混淆,但确实可以省去一些重新获取变量值的动作。
值得注意的几点:所有方法都没有申明static,在被用静态方式调用的方法里,可以用$this去调用a类的方法和属性。
个人猜测:因为是在a类的方法里调用的,所以也算是a类的一部分,所以可以用a类的局部变量、方法。
class a { public $db = null; public function all_menus() { echo "我是all_menus"; } public function __construct($db) { if ($this->db == null) { $this->db = $db; } $this->db->setDataBase("sites_users_info"); //设置数据库 } public function save_competence() { //...一系列检测$_POST数据合法性,插入数据库后,最后,执行另一个类的方法,用静态方式调用,省去实例化过程 menu::create_menu_styles(); } } 另一个类menu的样子大概: class menu { public $db = null; public function all_menus() { echo "我是all_menus"; } public function create_menu_styles() { $this->all_menus(); //会显示 var_dump($this->db); //会显示 } }
我不知道这该归类为不严谨的PHP,还是怎么。
这样用很容易混淆,这种写法也不容易发现。
任何杂志、论坛、书籍都未介绍过这个用法。
真正原因:
http://php.net/manual/en/language.oop5.static.php
发表回复