konakona
[原创]从一个类用静态方式调用另一个类的方法时,将自动具备来源类的方法和属性
[原创]从一个类用静态方式调用另一个类的方法时,将自动具备来源类的方法和属性

我是因为在做项目的时候发现方法应该写在另一个类里,于是从权限类,拷贝到了菜单类里,但执行的时候竟然发现了这个问题……

很多人都不知道可以这样用,事实上我也认为这样会搞混淆,但确实可以省去一些重新获取变量值的动作。

值得注意的几点:所有方法都没有申明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

赞赏
首页      程序开发      PHP      [原创]从一个类用静态方式调用另一个类的方法时,将自动具备来源类的方法和属性
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

  • https://secure.gravatar.com/avatar/?s=80&r=g
    solo

    个人最好不要用这种办法,别人看这样的代码真的会混淆的。

    9年前回复
  • https://secure.gravatar.com/avatar/?s=80&r=g
    solo

    唉。。。你在PPC发的帖子,竟然要版主才能回复。。。

    9年前回复
  • https://secure.gravatar.com/avatar/e872ac644b078b2a10280d06ec7d6cdd?s=80&r=g

    例子错误,怎么可以这么调用?

    menu::create_menu_styles();

    9年前回复
  • https://secure.gravatar.com/avatar/5fcd46dddbd0b045e694efb3d963f6b1?s=80&r=g
    qpwoeiru96

    基本上翻了博主的博客一遍,发现这篇是好文,不过博主没讲的很仔细:
    If you inadvertently call a non-static method in one class from another class, using $this in the former will actually refer to the wrong class.
    如果你在一个类使用此操作符不经意之间调用了另外一个类的非静态方法,使用 $this 会得到一个错误的指向。归根结底就是说作用域变了。

    7年前回复
    • https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=80&r=g
      团哥博主

      @qpwoeiru96: PHP的多态性、重构性一直没有JAVA强。
      我也是在前段时间才学习的JAVA,而写这篇文章的时候并不了解JAVA中完善的面向对象、类体系。
      有机会我可以重新写一下这篇文章!嘎嘎~

      7年前回复

konakona

[原创]从一个类用静态方式调用另一个类的方法时,将自动具备来源类的方法和属性
因为是在a类的方法里调用的,所以也算是a类的一部分,所以可以用a类的局部变量、方法。
扫描二维码继续阅读
2010-08-03