广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php的static静态方法怎么使用
  • 251
分享到

php的static静态方法怎么使用

2023-07-04 11:07:16 251人浏览 薄情痞子
摘要

本文小编为大家详细介绍“PHP的static静态方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“php的static静态方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php static静

本文小编为大家详细介绍“PHP的static静态方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“php的static静态方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

php static静态方法中的“静态”指的是无需对类进行实例化,就可以直接调用这些属性和方法;而static就是一个关键字,用来修饰类的属性及方法,其使用语法如“class Foo {public static $my_static = 'hello';}”。

PHP static静态详解

PHP 类属性和方法都需要在类实例化后才能调用(常量属性除外),但是,PHP 还提供了静态属性和静态方法,所谓「静态」指的是无需对类进行实例化,就可以直接调用这些属性和方法。静态类不是不可以实例化,而是不需要实例化就可以用。

静态成员的定义

用static关键字来修饰类的属性、方法,称这些属性、方法为静态属性、静态方法。

1、静态属性

语法:

static 属性名

实例:

<?phpclass Foo {  public static $my_static = 'hello';  }?>

2、静态方法

语法:

static function 方法名{    //代码}

实例:

<?phpclass Foo {  public static function staticValue() {     return 'hello';  }}?>

注:静态属性和方法与对象属性和方法一样,支持设置 privateprotectedpublic 三种可见性级别。

静态成员的调用

1、在类外调用静态属性/方法

通过 类名::属性/方法 的方式调用。

<?phpclass Mystatic {  public static $staticvalue = 'zhangsan';  public static function staticMethod() {    $a = 'hello';    return $a;  }}echo '$staticvalue: '.Mystatic::$staticvalue.PHP_EOL;echo '$a: '.Mystatic::staticMethod().PHP_EOL;?>

注:预定义常量 PHP_EOL 表示系统换行符。

结果:

$staticvalue: zhangsan$a: hello

通过 对象名::属性/方法 的方式调用。

<?phpclass Mystatic {  public static $staticvalue = 'zhangsan';  public static function staticMethod() {    $a = 'hello';    return $a;  }}$obj = new Mystatic();echo '$staticvalue: '.$obj::$staticvalue.PHP_EOL;echo '$a: '.$obj::staticMethod();?>

结果:

$staticvalue: zhangsan$a: hello

通过对象名 -> 方法调用、对象名 -> 属性会失败。

<?phperror_reporting(0);class Mystatic {  public static $staticvalue = 'zhangsan';  public static function staticMethod() {    $a = 'hello';    return $a;  }}$obj = new Mystatic();echo '$staticvalue: '.$obj -> staticvalue.PHP_EOL;echo '$a: '.$obj -> staticMethod();?>

结果:

$staticvalue:$a: hello

2、在非静态方法中调用静态属性/方法

通过 self::属性/方法 的方式调用,self 指向当前类,就像 $this 指向当前对象一样;而在没有实例化的情况下,$this 指针指向的是空对象,所以不能动过它引用静态属性和方法。

<?phpclass Mystatic {  public static $staticvalue = 'zhangsan';  public static function staticMethod() {    $a = 'hello';    return $a;  }  public function noStatic(){    echo '$staticvalue: '.self::$staticvalue.PHP_EOL;    echo '$a: '.self::staticMethod();  }}$obj = new Mystatic();$obj -> noStatic();?>

结果:

$staticvalue: zhangsan$a: hello

3、在静态方法中调用静态属性/方法

与在非静态方法中调用静态属性/方法一样。

<?phpclass Mystatic {  public static $staticvalue = 'zhangsan';  public static function staticMethod1() {    $a = 'hello';    return $a;  }  public static function staticMethod2(){    echo '$staticvalue: '.self::$staticvalue.PHP_EOL;    echo '$a: '.self::staticMethod1().PHP_EOL;  }}Mystatic::staticMethod2();$obj = new Mystatic();$obj -> staticMethod2();?>

结果:

$staticvalue: zhangsan$a: hello$staticvalue: zhangsan$a: hello

4、调用另一个类的静态属性/方法

如果在一个类中调用其他类的静态属性和方法,需要通过 完整类名:: 进行引用。

<?phpclass Mystatic1 {  public static $staticvalue1 = 'xiaomin';}class Mystatic2 {  public static $staticvalue2 = 'zhangsan';  public static function staticMethod() {    echo '$staticvalue1: '.Mystatic1::$staticvalue1.PHP_EOL;    echo '$staticvalue2: '.self::$staticvalue2.PHP_EOL;  }}Mystatic2::staticMethod();$obj = new Mystatic2();$obj -> staticMethod();?>

结果:

$staticvalue1: xiaomin$staticvalue2: zhangsan$staticvalue1: xiaomin$staticvalue2: zhangsan

5、调用privateprotected可见性级别的静态属性/方法

由于privateprotected属性的限制只在类内调用,想在类外调用,需为外部提供一个public的方法,方法访问privateprotected属性。术语:类对外提供接口。

<?phpclass Mystatic {  public static $staticvalue1 = 'zhangsan';  private static $staticvalue2 = 20;  protected static $staticvalue3 = 'student';  private static function staticMethod() {    $a = 'hello';    return $a;  }  public function port1() {    echo '$staticvalue1: '.self::$staticvalue1.PHP_EOL;    echo '$staticvalue2: '.self::$staticvalue2.PHP_EOL;    echo '$staticvalue3: '.self::$staticvalue3.PHP_EOL;    echo '$a: '.self::staticMethod().PHP_EOL;  }  public static function port2() {    echo '$staticvalue1: '.self::$staticvalue1.PHP_EOL;    echo '$staticvalue2: '.self::$staticvalue2.PHP_EOL;    echo '$staticvalue3: '.self::$staticvalue3.PHP_EOL;    echo '$a: '.self::staticMethod().PHP_EOL;  }}$obj = new Mystatic();$obj -> port1();echo "\r\n";Mystatic::port2();?>

结果:

$staticvalue1: zhangsan$staticvalue2: 20$staticvalue3: student$a: hello$staticvalue1: zhangsan$staticvalue2: 20$staticvalue3: student$a: hello

静态属性支持动态修改

在实际应用中会有一个类的多个对象,可能会共享一份数据。类常量和静态属性都可以实现。静态属性与类常量相似(相同),唯一的区分是类常量不可以更改,静态属性可以更改。访问方法是一样的,都可以使用::访问。 静态属性需要加$,常量名前没有$,所以访问类常量时根本不需要加。

1、类常量

<?phpclass Myconst {  const A = 1234;}$obj1 = new Myconst();echo 'A: '.$obj1::A.PHP_EOL;$obj1->A='aaa';//$obj1::A='aaa';会报错echo "\r\n";$obj2 = new Myconst();echo 'A: '.$obj2::A.PHP_EOL;?>

结果:

A: 1234A: 1234

2、静态属性

<?phpclass Mystatic {  public static $A = 1234;}echo '$A: '.Mystatic::$A.PHP_EOL;Mystatic::$A = 6666;echo '$A: '.Mystatic::$A.PHP_EOL;$obj1 = new Mystatic();echo '$A: '.$obj1::$A.PHP_EOL;Mystatic::$A = 5555;$obj2 = new Mystatic();echo '$A: '.$obj2::$A.PHP_EOL;echo '$A: '.$obj1::$A.PHP_EOL;?>

登录后复制

结果:

$A: 1234$A: 6666$A: 6666$A: 5555$A: 5555

静态成员的继承和重写

和非静态属性/方法一样,静态属性和方法也可以被子类继承,静态属性和方法还可以被子类重写。

1、静态属性

子类可以重写父类的静态成员变量, 但父类的静态变量依然存在, 这两个静态成员变量是独立的. 会根据调用的类名分别进行访问。

<?phpclass Mystatic{    static public $a;           //定义一个静态变量    static function test()        //定义静态方法来操作并输出静态变量    {        self::$a++;        return self::$a;    }}class Mystatic2 extends  Mystatic          //定义一个子类{    static function test()           //定义子类的静态方法    {        self::$a++;                 //访问并操作父类的静态变量        return self::$a;    }}$obj1=new Mystatic;                              //新建父类对象echo '此时$a的值为: '.$obj1->test().PHP_EOL;     //通过对象调用静态方法test,静态属性$a的值+1$obj2=new Mystatic;                              //新建另一个父类对象echo '此时$a的值为: '.$obj2->test().PHP_EOL;     //新父类对象调用静态方法test,静态属性$a的值+1+1$obj3=new Mystatic2;                             //新建子类对象echo '此时$a的值为: '.$obj3->test().PHP_EOL;     //子类对象调用同名静态方法test, 静态属性$a的值+1+1+1echo Mystatic::$a.PHP_EOL;    //通过父类::直接访问静态成员$a变量echo $obj1::$a.PHP_EOL;   //通过对象名::可以直接访问静态成员$a变量?>

结果:

此时$a的值为: 1此时$a的值为: 2此时$a的值为: 333

2、静态方法

子类可以重写父类的静态方法。

<?phpclass Mystatic1 {    public static function getclassName() {        return __CLASS__;    }    public static function whoclassName() {        echo self::getclassName().PHP_EOL;    }}class Mystatic2 extends Mystatic1{    public static function getclassName() {        return __CLASS__;    }}echo Mystatic1::getclassName().PHP_EOL;echo Mystatic2::getclassName().PHP_EOL;?>

通过 __CLASS__ 可以获取当前类的类名,我们分别调用两个类的 getClassName 方法:

结果:

Mystatic1Mystatic2

说明子类重写了父类的同名静态方法,同样我们在子类上也可以调用父类中的 whoclassName 方法:

<?phpclass Mystatic1 {    public static function getclassName() {        return __CLASS__;    }    public static function whoclassName() {        echo self::getclassName().PHP_EOL;    }}class Mystatic2 extends Mystatic1{    public static function getclassName() {        return __CLASS__;    }}echo Mystatic1::whoclassName();echo Mystatic2::whoclassName();?>

结果:

Mystatic1Mystatic1

为什么第二个打印的结果是父类名 Mystatic1 而不是子类名 Mystatic2?这是因为, $this 指针始终指向持有它的引用对象,而self 指向的是定义时持有它的类而不是调用时的类,为了解决这个问题,从 PHP 5.3 开始,新增了一个叫做延迟静态绑定的特性。

延迟静态绑定

延迟静态绑定(Late Static Bindings)针对的是静态方法的调用,使用该特性时不再通过 self:: 引用静态方法,而是通过 static::,如果是在定义它的类中调用,则指向当前类,此时和 self 功能一样,如果是在子类或者其他类中调用,则指向调用该方法所在的类

<?phpclass Mystatic1 {    public static function getclassName() {        return __CLASS__;    }    public static function whoclassName() {        echo static::getclassName().PHP_EOL;    }}class Mystatic2 extends Mystatic1{    //self改为static    public static function getclassName() {        return __CLASS__;    }}echo Mystatic1::whoclassName();echo Mystatic2::whoclassName();?>

结果:

Mystatic1Mystatic2

表明后期静态绑定生效,即 static 指向的是调用它的方法所在的类,而不是定义时,所以称之为延迟静态绑定。

此外,还可以通过 static::class 来指向当前调用类的类名,例如我们可以通过它来替代 __CLASS__,这样上述子类就没有必要重写 getClassName 方法了:

<?phpclass Mystatic1 {    public static function getclassName() {        return static::class;    }    public static function whoclassName() {        echo static::getclassName().PHP_EOL;    }}class Mystatic2 extends Mystatic1{}echo Mystatic1::getclassName().PHP_EOL;echo Mystatic2::getclassName().PHP_EOL;echo Mystatic1::whoclassName();echo Mystatic2::whoclassName();?>

结果:

Mystatic1Mystatic2Mystatic1Mystatic2

同理,self::class 则始终指向的是定义它的类。

静态与非静态的区别

  • 静态属性和方法可以直接通过类引用,所以又被称作类属性和类方法。非静态属性和非静态方法需要实例化后通过对象引用,因此被称作对象属性和对象方法。

  • 静态属性保存在类空间,非静态属性保存在对象空间。非静态方法可以访问类中的任何成员(包括静态),静态方法只能访问类中的静态成员。

  • 静态方法可以直接调用,类名调用和对象调用(类名或self::调用),但是非静态方法只能通过对象调用(对象名或$this->调用)。

  • 一个类的所有实例对象,共用类中的静态属性。如果修改了这个类静态属性,那么这个类的所有对象都能访问到这个新值。

  • 静态方法和属性的生命周期跟相应的类一样长,静态方法和静态属性会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁。 非静态方法和属性的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法和属性才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。但静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。

应用场景:

  1. 静态方法最适合工具类中方法的定义;比如文件操作,日期处理方法等.

  2. 静态变量适合全局变量的定义.

php有什么用

php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。

读到这里,这篇“php的static静态方法怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网PHP编程频道。

--结束END--

本文标题: php的static静态方法怎么使用

本文链接: https://www.lsjlt.com/news/344909.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php的static静态方法怎么使用
    本文小编为大家详细介绍“php的static静态方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“php的static静态方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。php static静...
    99+
    2023-07-04
  • php的static静态方法是什么
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。PHP static静态详解PHP 类属性和方法都需要在类实例化后才能调用(常量属性除外),但是,PHP 还提供了静态属性和静态方法,所谓「静态」指的是无需对类进行实...
    99+
    2022-10-31
  • php中的静态方法怎么使用
    这篇“php中的静态方法怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中的静态方法怎么使用”文章吧。一、什么是...
    99+
    2023-07-05
  • Java中的static关键字和静态变量、静态方法
    本篇内容介绍了“Java中的static关键字和静态变量、静态方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • php中的静态属性和静态方法怎么用
    这篇文章主要介绍“php中的静态属性和静态方法怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php中的静态属性和静态方法怎么用”文章能帮助大家解决问题。在php中,通过static关键字修饰的...
    99+
    2023-06-26
  • php中静态方法怎么访问非静态方法
    本篇内容主要讲解“php中静态方法怎么访问非静态方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中静态方法怎么访问非静态方法”吧!PHP中静态方法可以访问非静态方法;可以先实例化对象,然...
    99+
    2023-06-29
  • C语言静态变量static怎么使用
    这篇文章主要讲解了“C语言静态变量static怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言静态变量static怎么使用”吧!关键字static   &nb...
    99+
    2023-07-05
  • C#的静态方法怎么使用
    这篇文章主要介绍“C#的静态方法怎么使用”,在日常操作中,相信很多人在C#的静态方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#的静态方法怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-30
  • Powermock静态方法怎么使用
    本篇内容主要讲解“Powermock静态方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Powermock静态方法怎么使用”吧!Mockito 很强大, 但是它不支持静态方法.所以, ...
    99+
    2023-06-04
  • php如何使用静态方法
    本篇内容介绍了“php如何使用静态方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在php中,通过static关键字修饰的成员方法被称为静...
    99+
    2023-06-20
  • php怎么调用static 方法
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php怎么调用static 方法?php中使用static方法代码如下:Join(); #$test::Join(); 可以这样调用相关介绍:静态属性1: sta...
    99+
    2022-10-28
  • php为什么要使用静态方法
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php为什么要使用静态方法静态方法不需要所在类被实例化就可以直接使用。静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。静态方法和静...
    99+
    2015-09-04
    PHP
  • php中静态方法有什么作用?怎么使用?
    PHP是一款以服务端脚本语言为主的编程语言,它主要用于Web应用程序的开发。在PHP中,静态方法是其中一种非常有用的语法特性之一,对于编写复杂的应用程序尤其有帮助。在本文中,我们将介绍PHP中静态方法的作用以及如何在应用程序中使用它们。一、...
    99+
    2023-05-14
    php
  • PHP私有静态方法怎么定义和使用
    这篇文章主要介绍“PHP私有静态方法怎么定义和使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP私有静态方法怎么定义和使用”文章能帮助大家解决问题。什么是私有静态方法?在PHP面向对象编程中,...
    99+
    2023-07-05
  • 关于访问node express中的static静态文件方法
    目录访问node express中的static静态文件应用场合解决方法示例Express访问静态资源(express.static)前端调用静态资源Express访问静态资源访问n...
    99+
    2022-11-13
  • Java中的静态字段和静态方法怎么用
    这篇文章主要介绍了Java中的静态字段和静态方法怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先看看下面这一串代码:public class Mai...
    99+
    2023-06-29
  • php使用静态方法的原因是什么
    这篇文章将为大家详细讲解有关php使用静态方法的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中,使用静态方法是因为不需要所在类被实例化就可以直接使用,静态方法和静态变量创建后始终使用同...
    99+
    2023-06-29
  • php中的静态属性和静态方法是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在 PHP 中,通过 static 关键字修饰的成员属性和成员方法被称为静态属性和静态方法,这里可以将它们统称为静态成员,类中的静态成员与类中的一般成员不同,静态成员不...
    99+
    2021-03-06
    php 静态属性 静态方法
  • 怎么在java中使用静态方法
    本篇文章为大家展示了怎么在java中使用静态方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列...
    99+
    2023-06-14
  • C#静态方法的使用
    一、简介 使用了static 修饰符的方法为静态方法,反之则是非静态方法。 静态方法是一种特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作