Php面向对象?静态成员

php中文网
发布: 2016-06-23 13:51:29
原创
979人浏览过

php面向对象?静态成员

 

静态属性

 

使用static关键字声明的属性

立即学习PHP免费学习笔记(深入)”;

该静态属性,在逻辑上,是定义在类上面的属性。保证一个类,对应一个属性。

 

例子:

 

class Student

{

public  $stu_id;

public  $stu_name;

 

public  static $stu_count = 0;

 

public  function __constuct($id,$name)

{

       $this->stu_id = $id;

       $this->stu_name = $name;

}
}

 

访问静态属性:

通过类来访问:在利用静态访问符号(::)

类::成员

 

例子:

 

 

class Student

{

public  $stu_id;

public  $stu_name;

 

public  static $stu_count = 0;

 

public  function __constuct($id,$name)

{

       $this->stu_id = $id;

       $this->stu_name = $name;

       Student::$stu_count ++;

}
}

 

::的访问称之为静态访问,->为非静态访问(对象访问)

 

在访问静态属性时,如果是在类内访问:则可以使用self当前类

 

例子:

 

class Student

{

public  $stu_id;

public  $stu_name;

 

public  static $stu_count = 0;

 

public  function __constuct($id,$name)

{

       $this->stu_id = $id;

       $this->stu_name = $name;

       self::$stu_count ++;

}
}

 

注意:$this 和 self 的区别

$this 表示的是这个对象,self表示这个类

 

 

静态方法

 

静态方法的逻辑意义,也是定义再类上的方法。同样,调用形式类::

 

例子:

 

class Student

{

public  $stu_id;

public  $stu_name;

 

public  static $stu_count = 0;

 

public  function __constuct($id,$name)

{

       $this->stu_id = $id;

       $this->stu_name = $name;

       self::$stu_count ++;

}

 

public  static function  sayCount()

多面鹅
多面鹅

面向求职者的AI面试平台

多面鹅 25
查看详情 多面鹅

{

       echo “run static ”;

}
}

 

Student::sayCount();

 

 

静态方法和非静态方法,的主要区别,在于是否可以接收一个对象的执行环境。

就是是否可以为方法内的$this是否可以被赋值

 

只有在对象调用方法时,才能将对象执行环境传递到方法内,$this才可以被赋值。

静态方法中无法使用非静态属性。

 

一个静态方法,只能处理静态数据(静态属性)

 

例子:

 

class Student

{

public  $stu_id;

public  $stu_name;

 

public  static $stu_count = 0;

 

public  function __constuct($id,$name)

{

       $this->stu_id = $id;

       $this->stu_name = $name;

       self::$stu_count ++;

}

 

public  static function  sayCount()

{

       echo self::$stu_count;

}
}

 

Student::sayCount();

 

 

Php中特殊的方法访问问题:

 

强调:静态方法应该类来调用,非静态方法应该对象来调用

 

class C

{

       public function f1()

       {

              echo‘f1
’;

       }

 

       public  static function f2()

       {

              echo‘f2
’;

       }

}

 

$o = new C;

$o->f1();

C::f2();

 

但是:

1.    无论静态还是非静态方法,都可使用类访问:不过如果类静态调用一个非静态方法,会报告一个语法不标准的错误。

2.    区别就在于$this上

只有再使用对象调用非静态方法时,才可以使用方法内的$this.

class C

{

       public  function f1()

       {

              echo‘f1
’;

       }

 

       public  static function f2()

       {

              echo‘f2
’;

       }

}

 

C::f1();

C::f2();

 

 

总结:类的静态方法和非静态方法,类都只保存一份,只是运行时的运行环境不同。只有再使用对象调用非静态方法时,才可以使用方法内的$this.

 

 

 

 

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号