Php面向对象—静态成员

静态属性

使用static关键字声明的属性

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

例子:

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

{

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<br>’;

}

public  static function f2()

{

echo‘f2<br>’;

}

}

$o = new C;

$o->f1();

C::f2();

但是:

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

2.    区别就在于$this上

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

class C

{

public  function f1()

{

echo‘f1<br>’;

}

public  static function f2()

{

echo‘f2<br>’;

}

}

C::f1();

C::f2();

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

Php面向对象—静态成员

时间: 2024-07-29 18:09:40

Php面向对象—静态成员的相关文章

C++面向对象 静态成员和友元

第十一章 静态成员和友元 11.1 静态成员 1.C++类当中的静态数据成员仍借用保留字static,但是与之前的静态全局变量,静态局部变量以及静态函数没有关系. 2.静态数据成员不占用具体对象的数据空间. 3.静态数据成员的创建和销毁处分权不属于任何对象.对象有权利读和写静态成员.静态成员应该在创建任何具体对象之前就可以访问,所以要求静态成员在创建类的任何对象 之前就要存在(犹如全局变量.全局对象在main函数前面执行一样)因此静态数据成员应该在主函数之前先定义初始化. 4.静态数据成员不能没

10 面向对象(package关键字的概述及作用)

10.01_面向对象(package关键字的概述及作用) A:为什么要有包 *开发时有很多类,如果放在一个文件夹中不方便管理,而且容易重复 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改,查询 - 方案1:按照功能分 com.heima.add AddStudent AddTeacher com.heima.delete DeleteStudent DeleteTeacher com.heima.update U

PHP面向对象笔记解析

PHP的面向对象是很重要的内容,也是很常用的内容.所以现在就把PHP面向对象进行整理了一下. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2 一.面向对象的基本概念 1.什么是面向对象? 对象 面向 由于目前都还没有一个统一的概念,所以所能理解的就是一个物体被抽象出来,每个物品都是一

day10&lt;面向对象+&gt;

面向对象(package关键字的概述及作用) 面向对象(包的定义及注意事项) 面向对象(带包的类编译和运行) 面向对象(不同包下类之间的访问) 面向对象(import关键字的概述和使用) 面向对象(四种权限修饰符的测试) 面向对象(类及其组成所使用的常见修饰符) 面向对象(内部类概述和访问特点) 面向对象(成员内部类私有使用) 面向对象(静态成员内部类) 面向对象(成员内部类的面试题) 面向对象(局部内部类访问局部变量的问题) 面向对象(匿名内部类的格式和理解) 面向对象(匿名内部类重写多个方法

JavaEE基础(十)

1.面向对象(package关键字的概述及作用) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改,查询 ... 方案1:按照功能分 com.heima.add AddStudent AddTeacher com.heima.delete DeleteStudent DeleteTeacher com.heima.update UpdateStudent UpdateTeacher com.hei

C#面向对象课程 类与对象,方法重载,类的静态成员,命名空间和类库12月22日

一.类是面向对象课程的基本单元. 在类的里面可以直接定义字段(成员变量),也可以定义方法(函数). 例如: 这里的public是修饰符,修饰符的作用是用来限定它的可访问范围. 两个同范围(同一个类中,或者父子类中)两个同名但参数类型不同或者参数个数不同的方法互相间构成重载关系. 两个构成重载关系的方法(函数)必须满足以下条件: (1)方法(函数)名相同: (2)参数类型不同,或参数个数不同.这里需要注意的是,函数返回值类型的不同不是函数重载的判断条件. 二.静态成员 属性.方法和字段等成员是对象

对【面向对象的类访问和对象访问的区别【this以及类访问】、静态成员的访问区别、类常量等、继承和重写、访问修饰限定符、冒泡排序】的总结

面向对象的总结1.首先面向对象的编程使用的都是使用对象作为处理对象而言[例如继承等情形,继承的本质来说,依旧针对的是对象]但是只有针对类的访问.静态成员以及访问修饰限定符时,针对的是类的概念 2.类内定义时,只有五种情形:类常量[const关键字定义并且使用类来调用]属性[这些属性和方法是针对该类实例的对象来调用]方法[在这种情形下使用$this进行指代作用环境(调用该方法的对象),只有继承中,子类实例的对象会向下传递到静态调用里]静态属性[用来作为实例该类的所有对象之间共享的数据.保存在类中]

静态成员、final成员、面向对象接口

静态成员 静态属性定义时在访问控制关键字后面加static 在类定义中使用静态成员的时候,用self关键字后面跟着::操作符,在访问静态成员的时候::后面需要跟$符号 在类定义外部访问静态属性,用类名加::操作符的方法来访问 1.静态属性用于保存类的公有数据 2.静态方法里面只能访问静态属性 3.静态成员不需要实例化对象就可以访问 4.类的内部可以通过self 或者static关键字访问自身静态成员 5.可以通过parent关键字访问父类的静态成员 6.可以通过类的名称在类定义外部访问静态成员

面向对象的类访问和对象访问的区别【this以及类访问】、静态成员的访问区别、类常量等、继承和重写、访问修饰限定符、冒泡排序

1.mysql封装类 在构造函数中定义初始化数据库连接的相关参数[因为实例化对象时传入的参数是该对象的唯一参数入口]但是不需要再构造函数中进行冗余定义,而是在构造函数中进行调用类中的其他方法的方式来实现构造函数的设置工作[这样的模块分离使逻辑更加简单] [重点]2.静态成员相当于每次实例化对象之间是有关系的[例如计数功能]因为每次实例化类时创建的对象占用的空间都是新创建的,这一点需要注意,所以同一个类下的对象之间的变量并没有交互的效果.[回想起当初函数中的静态局部变量的使用][延生到静态全局变量