PHP中面向对象之Static关键字详解(代码实例)
本文目标:
1、理解static的定义和作用
2、把握static的用途和特点
我们学习一个知识,可以按照3w1h的思绪来学习,轻微简便的介绍一下3w1h
3w1h即
● what(是啥)
● why(为什么使用它,它有什么作用)
● where(使用处景)
● how(详细如何使用)
(一)、static关键字的定义(what)
1、被static润饰的属性或者办法,我们称之为类的静态成员
(二)、static关键字的作用(why)
1、让类的所有实例都能同享某个属性或者办法
(三)、static使用处景(where)
1、当但愿某个办法或者属机能被所有实例同享的时候,可以思考static
(四)、static的使用详解(how)
总结:
1、静态属性的定义 ,直接在属性定义前加static 比方 static public $name ;
2、静态属性不克不及用类的实例去猎取,而是通过以下方式猎取:
● 类名::$属性名称
● 在类的内部,可以通过self::$属性名称
3、静态办法的定义,直接在办法定义前加static 比方static public function Hello(){ }
4、静态办法不克不及用类的实例去猎取,而是通过以下方式猎取:
● 类名::办法名称
● 在类的内部,可以通过self::办法名称
5、在php中,不克不及用static润饰类,只能润饰属性或者办法
6、静态办法内部不克不及调取非静态属性,只能调取静态属性
7、静态办法内部不克不及调取非静态办法,只能调取静态办法
8、非静态办法内部,既可以调取非静态属性,也可以调取静态属性
9、非静态办法内部,既可以调取非静态办法,也可以调取静态办法
所有的总结,都是实践得来的,那么接下来,我们用实际代码来演示上面的每一条总结,看看他们到底可否准确
(四)、详细代码
案例一:
实践目标:
1、静态属性的定义 ,直接在属性定义前加static 比方 static public $name ;
2、静态属性不克不及用类的实例去猎取,而是通过以下方式猎取:
● 类名::$属性名称
● 在类的内部,可以通过self::$属性名称
<?php class Human{ static public $name = "人类";//静态属性的定义 public function say(){ echo "self::name = ".self::$name ."<br/>"; } } //输出静态属性 echo "名称为:".Human::$name."<br/>"; $human = new Human(); $human->say(); ?>
运转结果为:
案例二:
实践目标:
1、静态办法的定义,直接在办法定义前加static 比方static public function Hello(){ }
2、静态办法不克不及用类的实例去猎取,而是通过以下方式猎取:
● 类名::办法名称
● 在类的内部,可以通过self::办法名称
<?php class Human{ public function __construct(){ self::staticFun1(); } static public function staticFun1(){ echo "我是静态办法<br/>"; } } //输出静态办法 Human::staticFun1(); //运转结构函数,看可否可以被正常调取 $human = new Human(); ?>
运转结果为:
案例三:
实践目标:
1、在php中,不克不及用static润饰类,只能润饰属性或者办法
<?php static class Human{ } ?>
运转结果为:
Parse error: syntax error, unexpected 'class' (T_CLASS), expecting :: (T_PAAMAYIM_NEKUDOTAYIM) in D:\E-class\class-code\classing\index.php on line 2
案例四:
实践目标:
1、 静态办法内部不克不及调取非静态属性,只能调取静态属性
<?php class Human{ static public $staticName = "静态属性-人类"; public $commonName="非静态属性-人类"; //定义静态办法 静态办法调取非静态属性 static public function staticFun1(){ echo $this->commonName."<br/>"; } //测试静态办法调取静态属性 static public function staticFun2(){ echo self::$staticName."<br/>"; } } Human::staticFun2();//OK Human::staticFun1();//not OK ?>
运转结果为:
静态属性-人类
Fatal error: Uncaught Error: Using $this when not in object context in D:\E-class\class-code\classing\index.php:8 Stack trace: #0 D:\E-class\class-code\classing\index.php(18): Human::staticFun1() #1 {main} thrown in D:\E-class\class-code\classing\index.php on line 8
案例五:
实践目标:
1、 静态办法内部不克不及调取非静态办法,只能调取静态办法
<?php class Human{ //定义静态办法 //测试静态办法调取 静态办法 static public function staticFun1(){ self::staticFun2(); $this->commonFun1(); } static public function staticFun2(){ echo "我是静态办法2<br/>"; } //一般办法 public function commonFun1(){ echo "我是一般办法1<br/>"; } } Human::staticFun1(); ?>
运转结果为:
我是静态办法2
Fatal error: Uncaught Error: Using $this when not in object context in D:\E-class\class-code\classing\index.php:8 Stack trace: #0 D:\E-class\class-code\classing\index.php(20): Human::staticFun1() #1 {main} thrown in D:\E-class\class-code\classing\index.php on line 8
案例六:
实践目标:
1、非静态办法内部,既可以调取非静态属性也可以调取静态属性
<?php class Human{ static public $staticName = "静态属性-人类"; public $name = "非静态属性-人类"; ///一般办法 public function commonFun1(){ echo self::$staticName."<br/>"; echo $this->name."<br/>"; } } $human = new Human(); $human->commonFun1(); ?>
运转结果为:
静态属性-人类
非静态属性-人类
案例七:
实践目标:
1、非静态办法内部,既可以调取非静态办法也可以调取静态办法
<?php class Human{ ///一般办法 public function commonFun1(){ self::staticFun1(); $this->commonFun2(); } //测试静态办法调取 静态办法 static public function staticFun1(){ echo "我是静态办法1<br/>"; } public function commonFun2(){ echo "我是一般办法2<br/>"; } } $human = new Human(); $human->commonFun1(); ?>
运转结果为:
我是静态办法1
我是一般办法2
(五)、学乃至用
问题:
1、所有的NBA球员都有一个共同的联盟总裁,David Stern(大卫*斯特恩)
2、总裁换成了“Adam Silver” 如何办?
大家本人思索一下,再看后面的结果
.........................
答案揭晓:
思绪剖析:
1、“换”是一个动词,换总裁,所以是一个办法,而总裁是一个数据,所以是一个属性
2、换总裁要到达一个目的就是,换了今后,这个对象依然要被其他所有的NBA球员对象使用到
3、既然 总裁 (属性) 要被所有的NBA球员对象 同享,那么我们就可以结合static的作用,将总裁属性定义为静态属性
4、所以按照综上所述,大约的思绪就是定义一个NBA球员类,然后类里面主要有静态属性“总裁”和一个 换总裁 的办法
详细代码如下:
<?php //Nba球员类 class NbaPlayer{ public $name = ""; //结构函数初始化对象 public function __construct($name){ $this->name = $name; } //总裁 static public $president = "David Stern"; //换总裁办法 public function changePresident($name){ self::$president = $name; } } $jordon = new NbaPlayer("乔丹"); $kebo = new NbaPlayer("科比"); echo "输出他们当前共同的总裁,总裁为:".NbaPlayer::$president."<br/>"; echo "此刻把乔丹总裁换成Adam Silver<br/>"; $jordon->changePresident("Adam Silver"); echo "输出科比的总裁可否也和乔丹的一样,科比总裁为:".NbaPlayer::$president."<br/>"; ?>
运转结果为:
输出他们当前共同的总裁,总裁为:David Stern
此刻把乔丹总裁换成Adam Silver
输出科比的总裁可否也和乔丹的一样,科比总裁为:Adam Silver
总结:
1、本文主如果讲了static关键字的定义和特点
但愿本文能给大家带来必然的帮忙,感谢!!!
以上就是PHP中面向对象之Static关键字详解(代码实例)的具体内容,更多请关注百分百源码网其它相关文章!