php静态属性和静态方法
来源:互联网 发布:新西兰 购物 知乎 编辑:程序博客网 时间:2024/06/06 20:17
在属性,和方法前 加 static 修饰,这种称为静态属性/ 静态方法
静态属性
class Human { static public $head = 1; public function changeHead() { Human::$head = 9; } public function getHead() { return Human::$head; }}// 现在没有对象,想访问静态的$head属性/*普通属性包在对象内,用对象->属性名 来访问静态属性放在类内的, 静态属性既然存放于类空间内1:类声明完毕,该属性就已存在,不需要依赖于对象而访问2:类在内存中只有一个,因此静态属性也只有一个*/// 当一个对象都没有,静态属性也已随类声明而存在echo Human::$head,'<br />'; // 1// 静态属性只有一个,为所有的对象的共享.$m1 = new Human();$m1->changeHead(); // 某个人改变了人类的头的数量$m2 = new Human();$m3 = new Human();echo $m2->getHead(),'<br />'; // 9echo $m3->getHead(),'<br />'; // 9
静态方法
static public/protected/private function t() {}
普通方法,存放于类内的,只有1份
静态方法,也是存放于类内的,只有1份
区别在于: 普通方法需要对象去调动, 需要绑定$this
即,普通方法,必须要有对象,用对象调动
而静态方法, 不属性哪个对象,属于类,因此不需要去绑定$this,
即, 静态方法,通过类名就可以调动
class Human { public $name = '张三'; static public function cry() { echo '5555'; } public function eat() { echo '吃饭'; } public function intro() { echo $this->name; }}// 此时一个对象都没有Human::cry(); //55555/*下面这个eat方法是一个非静态方法,应由对象来调用但是呢,调用了,也没出问题*/Human::eat(); //吃饭/*接上,但从逻辑来理解, 如果用类名静态调用非静态方法比如 intro() 那么: $this 到底是指哪个对象???因此,直接报错Fatal error: Using $this when not in object context in D:\www\1109\08.php on line 45*/ Human::intro(); //error/*如上分析,其实非静态方法,是不能由类名静态调用的.但是! PHP中的面向对象检测的并不严格,只要该方法没有$this,就会转化静态方法来调用.因此,cry()可以调用.但是,在PHP5.3的strict级别下,或者PHP5.4的默认级别都已经对类名::非静态方法做了提示则会提示:Strict Standards: Non-static method Human::eat() should not be called statically 不能静态的去调用非静态方法*/Error_reporting(E_ALL|E_STRICT);Human::eat();// 动访问静$lisi = new Human();$lisi->cry(); // 5555/*类->访问->静态方法 可以类->动态方法 方法内没有this的情况下,但严重不支持.逻辑上解释不通.对象-->访问动态方法 可以对象-->静态方法 可以
下一节我们将举例分析
0 0
- php静态属性和静态方法
- php静态属性和静态方法
- php静态属性和静态方法
- php静态属性和静态方法总结
- php静态属性和静态方法
- PHP static 静态属性和静态方法
- php静态属性,静态方法
- PHP 静态方法、静态属性
- 静态属性和静态方法
- PHP面向对象------静态属性和方法
- PHP 面向对象之静态属性和静态方法
- PHP基础教程十之静态属性和静态方法
- 静态字段、静态属性和静态方法
- php static 静态属性 静态方法
- PHP 面向对象之静态方法和属性;什么时候用静态和用静态的好处
- OGNL调用静态属性和静态方法
- 【c++】静态属性和静态方法
- 静态属性静态方法
- Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
- 关于HashSet是如何存取不重复的数据的理解
- 知识库
- 面试经历
- 深入分析AQS的Condition
- php静态属性和静态方法
- struts2自定义拦截器并配置拦截器使其生效
- 抽象类
- Unity UGUI学习(一)
- Uva820 Internet Bandwidth(网络流、双向EdmondsKarp)
- 39.NULL和临时变量和顺序结构
- 高质量代码的命名规则
- Android edittext 输入框 下一项 android:imeOptions="actionNext"
- Android 47个小知识