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

资源魔 38 0

本文指标:

一、理解static的界说以及作用

二、把握static的用法以及特性

咱们学习一个常识,能够依据3w1h的思绪来学习,略微简略的引见一下3w1h

3w1h即

● what(是甚么)

● why(为何应用它,它有甚么作用)

● where(应用场景)

● how(详细怎样应用)

(一)、static要害字的界说(what)

一、被static润饰的属性或许办法,咱们称之为类的动态成员

(二)、static要害字的作用(why)

一、让类的一切实例都能同享某个属性或许办法

(三)、static应用场景(where)

一、当心愿某个办法或许属功能被一切实例同享的时分,能够思考static

(四)、static的应用详解(how)

总结:

一、动态属性的界说 ,间接正在属性界说前加static 比方 static public $name ;

二、动态属性不克不及用类的实例去猎取,而是经过如下形式猎取:

● 类名::$属性称号

● 正在类的外部,能够经过self::$属性称号

三、动态办法的界说,间接正在办法界说前加static 比方static public function Hello(){ }

四、动态办法不克不及用类的实例去猎取,而是经过如下形式猎取:

● 类名::办法称号

● 正在类的外部,能够经过self::办法称号

五、正在php中,不克不及用static润饰类,只能润饰属性或许办法

六、动态办法外部不克不及挪用非动态属性,只能挪用动态属性

七、动态办法外部不克不及挪用非动态办法,只能挪用动态办法

八、非动态办法外部,既能够挪用非动态属性,也能够挪用动态属性

九、非动态办法外部,既能够挪用非动态办法,也能够挪用动态办法

一切的总结,都是理论患上来的,那末接上去,咱们用实际代码来演示下面的每一一条总结,看看他们究竟是否正确

(四)、详细代码

案例一:

理论指标:

一、动态属性的界说 ,间接正在属性界说前加static 比方 static public $name ;

二、动态属性不克不及用类的实例去猎取,而是经过如下形式猎取:

● 类名::$属性称号

● 正在类的外部,能够经过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

案例二:

理论指标:

一、动态办法的界说,间接正在办法界说前加static 比方static public function Hello(){ }

二、动态办法不克不及用类的实例去猎取,而是经过如下形式猎取:

● 类名::办法称号

● 正在类的外部,能够经过self::办法称号

<?php 
 class Human{
    public function __construct(){
        self::staticFun1();
    }
    static public function staticFun1(){
        echo "我是动态办法<br/>";
    }
}
//输入动态办法
Human::staticFun1();
//运转结构函数,看能否能够被失常挪用
$human = new Human();

?>

运转后果为:

2.png

案例三:

理论指标:

一、正在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

案例四:

理论指标:

一、 动态办法外部不克不及挪用非动态属性,只能挪用动态属性

<?php 
class Human{
    static public $staticName = "动态属性-人类";
    public $co妹妹onName="非动态属性-人类";
    
    //界说动态办法 动态办法挪用非动态属性
    static public function staticFun1(){
        echo $this->co妹妹onName."<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

案例五:

理论指标:

一、 动态办法外部不克不及挪用非动态办法,只能挪用动态办法

<?php 
class Human{
   
    //界说动态办法 
    //测试动态办法挪用 动态办法
    static public function staticFun1(){
        self::staticFun2();
        $this->co妹妹onFun1();
    }
    static public function staticFun2(){
        echo "我是动态办法2<br/>";
    }
    //一般办法
    public function co妹妹onFun1(){
        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

案例六:

理论指标:

一、非动态办法外部,既能够挪用非动态属性也能够挪用动态属性

<?php 
class Human{
    static public $staticName = "动态属性-人类";
    public $name = "非动态属性-人类";

    ///一般办法
    public function co妹妹onFun1(){
       echo self::$staticName."<br/>";
       echo $this->name."<br/>";
    }

}
$human = new Human();
$human->co妹妹onFun1();
?>

运转后果为:

动态属性-人类
非动态属性-人类

案例七:

理论指标:

一、非动态办法外部,既能够挪用非动态办法也能够挪用动态办法

<?php 
class Human{
    ///一般办法
    public function co妹妹onFun1(){
       self::staticFun1();
       $this->co妹妹onFun2();
    }

    //测试动态办法挪用 动态办法
    static public function staticFun1(){
        echo "我是动态办法1<br/>";
    }
    public function co妹妹onFun2(){
        echo "我是一般办法2<br/>";
    }
}
$human = new Human();
$human->co妹妹onFun1();
?>

运转后果为:

我是动态办法1
我是一般办法2

(五)、学致使用

成绩:

一、一切的NBA球员都有一个独特的同盟总裁,David Stern(年夜卫*斯特恩)

二、总裁换成为了“Adam Silver” 怎样办?

各人本人考虑一下,再看前面的后果

.........................

谜底揭晓:

思绪剖析:

一、“换”是一个动词,换总裁,以是是一个办法,而总裁是一个数据,以是是一个属性

二、换总裁要达到一个目的就是,换了当前,这个工具依然要被其余一切的NBA球员工具应用到

三、既然 总裁 (属性) 要被一切的NBA球员工具 同享,那末咱们就能够连系static的作用,将总裁属性界说为动态属性

四、以是依据综上所述,大略的思绪就是界说一个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

总结:

一、本文次要是讲了static要害字的界说以及特性

心愿本文能给各人带来肯定的协助,谢谢!!!

以上就是PHP中面向工具之Static要害字详解(代码实例)的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 面向对象 Static

抱歉,评论功能暂时关闭!