类的静态成员变量和普通成员变量该怎样去区别定义
首先补充一下一些类的基本知识:
“类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
类的内部封装了属性和方法,用于操作自身的成员。类是对某种对象的定义,具有行为(behavior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、属性、方法和事件。” – 百度百科
那么我们按照使用类的目的的优先级总结为:实现信息封装、提高程序的可读性、提高代码的复用性等。而类里面的成员属性和成员方法都是为了首先实现信息的封装(我理解的类的信息封装可以是数据的类型转换、信息补充、信息拆分或聚合等一系列操作)。那么这里我们应该去探讨的是静态成员变量和普通成员变量在信息封装中所扮演的角色。
首先我们看一下静态成员变量和普通成员变量的主要的不同:声明类属性或方法为静态,就可以不实例化类而直接访问。这意味着普通成员变量或方法会跟着实例化后的对象走,而静态的不必。所以我能得出的结论是:
类的普通成员变量一般为该类所具有的普通属性,当该类被实例化时该属性才会被赋值或真正使用,属于某一实例化对象的属性(动态,即跟着实例化的对象走)。而类的静态成员变量是具有成为定义该类的数据字段或n个实例化某一普通属性的聚合(少见),不属于任何实例化对象的属性(静态,不必跟着实例化的对象走)。
以杯子为例:
杯子的普通属性可以有:颜色、材质、容量、重量等;静态属性:各种杯子的合格标准。
例如:
class cup { // 名称 public $name; // 材质 public $material; // 颜色 public $color; // 容量 public $volume; // 重量 public $weight; // 合格标准 public static $standard = [ // 塑料杯 "plastic" => 1, // 玻璃杯 "glass" => 2, // 陶瓷杯 "ceramics" => 3 ]; // 构造 public function __construct($name, $material, $color = "", $volume = "", $weight = "") { $this->name = $name; $this->material = $material; $this->color = $color; $this->volume = $volume; $this->weight = $weight; } } $cup1 = new cup("cup1", "plastic"); $cup1->color = "red"; var_dump($cup1); var_dump(cup::$standard['plastic']);
文章中如有不正确的,欢迎大佬批评指正。
本作品采用《CC 协议》,转载必须注明作者和本文链接