PHP面向对象 —— 17 图解静态属性与静态方法

/*
在属性,和方法前
加static 修饰,这种称为静态属性/静态方法.

静态属性

静态属性存放在类空间中
1、类声明完毕,该属性就已存在,不需要依赖于对象而访问.
2、类在内存中只有一个,因此静态属性也只有一个.
*/

class Human {
	static public $head = 1;
	
	public function changeHead() {
		Human::$head = 9;
	}
	
	public function getHead() {
		return Human::$head;
	}
}

echo Human::$head; //1
// 静态属性的访问方法
echo '<br >';



// 静态属性只有一个,为所有的对象的共享.
$m1 = new Human();
$m1->changeHead();

$m2 = new Human();
$m3 = new Human();

echo $m2->getHead(),'<br >'; //9
echo $m3->getHead(),'<br >'; //9

这里写图片描述

/*
静态方法

普通方法,存放于类内的,只有1份
静态方法,也是存放于类内的,只有1份

区别在于:
普通方法需要对象去调动,需要绑定$this
即,普通方法,必须要有对象,且用对象调动

而静态方法,不属于哪个对象,属于类,因此不需要去绑定$this.
即,静态方法,通过类名就可以调动.
*/

这里写图片描述

class Human2 {
	public $name = '张三';
	
	static public function cry() {
		echo '5555';
	}
	
	public function eat() {
		echo '吃饭';
	}
	
	public function intro() {
		echo $this->name;
	}
}


// 此时一个对象都没有
Human2::cry();

// 下面这个eat是非静态方法,应由对象来调用
Human2::eat();
/*
报错提示:
Strict standards: Non-static method Human2::eat() should not be called statically
*/
echo '<br >';


//Human2::intro();
/*
直接报错:
Fatal error: Using $this when not in object context
*/

这里写图片描述

/*
总结:
如上分析,其实非静态方法,是不能由类名静态调用的.
*/

$lisi = new Human2();
$lisi->cry(); //5555

/*
类->访问->静态方法 可以
类->动态方法 方法内没有this的情况下,严重不支持.逻辑上解释不通.

对象->访问动态方法 可以
对象->静态方法 可以
*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值