百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP中面向对象之Static关键字详解(代码实例)
分享文章到:

PHP中面向对象之Static关键字详解(代码实例)

发布时间:09/01 来源:未知 浏览: 关键词:

本文目标:

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.png

案例二:

实践目标:

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();

?>

运转结果为:

2.png

案例三:

实践目标:

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关键字详解(代码实例)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板