开启PHP Static 关键字之旅模式
深入PHP中的静态成员与静态方法:长沙网络推广带你一竟
在PHP中,静态成员与静态方法是一种特殊的存在,它们并不依赖于类的任何特定实例,而是属于类本身。让我们一同PHP中的static关键字,深入理解其背后的含义与用法。
静态成员是类的一种变量,它属于整个类,而不是类的某个实例。与实例变量不同,静态成员只保留一个变量值,这个值对所有实例都是共享的。换句话说,无论创建多少个类的实例,静态成员都只有一个值。
使用static关键字声明类成员或方法后,我们可以不实例化类而直接访问。我们无法通过一个对象来访问静态成员(除了静态方法)。为了保持与PHP4的兼容性,如果没有指定可见性,属性和方法默认为public。
由于静态方法不需要通过对象即可调用,因此伪变量$this在静态方法中不可用。同样,静态属性也不能通过对象通过->操作符来访问。
在PHP5.3.0之后,我们可以使用一个变量来动态调用类,但这个变量的值不能为关键字self、parent或static。
接下来,我们通过两个示例来进一步理解静态成员和静态方法的使用。
示例一:静态成员代码示例
```php
class Foo {
public static $my_static = 'foo'; // 声明一个静态属性
public function staticValue() { // 定义一个访问静态属性的方法
return self::$my_static; // 使用self关键字访问静态属性
}
}
class Bar extends Foo {
public function fooStatic() {
return parent::$my_static; // 使用parent关键字访问父类的静态属性
}
}
// 访问静态属性
print Foo::$my_static . " "; // 直接通过类名访问静态属性
$foo = new Foo(); // 创建Foo类的实例
print $foo->staticValue() . " "; // 通过实例调用访问静态属性的方法
// 尝试通过实例访问静态属性会报错,因为Undefined "Property" my_static
print $foo::$my_static . " "; // PHP 5.3.0之后可以动态调用类来访问静态属性
print Bar::$my_static . " "; // 直接通过子类名访问继承的父类的静态属性
$bar = new Bar(); // 创建Bar类的实例
print $bar->fooStatic() . " "; // 通过实例调用访问静态属性的方法(继承自父类)
```
示例二:静态方法代码示例
```php
class Foo {
public static function aStaticMethod() { // 定义一个静态方法
// ...执行相关操作...
}
}
// 调用静态方法不需要创建类的实例
Foo::aStaticMethod();
$classname = 'Foo'; // 使用变量存储类名(PHP 5.3.0之后可以动态调用)
$classname::aStaticMethod(); // 动态调用类的静态方法
```
关于静态中的静态变量和静态方法:静态变量是只存在于函数作用域的变量,但在函数执行完成后,这种变量的值不会丢失。在类中,除了定义静态成员外,static关键字还可以用来定义静态方法。在类的内部,可以使用作用域限定符(::)来访问不同层次作用域的变量。静态方法和非静态方法之间的重要区别在于调用静态方法时,不再需要拥有类的实例。如果某个方法中不包含$this变量并且不需要类的实例,那么使用静态方法和静态类可能是一个好的选择。
编程语言
- 开启PHP Static 关键字之旅模式
- PHP完全二叉树定义与实现方法示例
- php5.3不能连接mssql数据库的解决方法
- GitHub 热门:别再用 print 输出来调试代码了
- JS实现双击屏幕滚动效果代码
- mui back 返回刷新页面的实例
- 探讨多键值cookie(php中cookie存取数组)的详解
- 探讨select in 在postgresql的效率问题
- 详解angularjs 关于ui-router分层使用
- 利用 fsockopen() 函数开放端口扫描器的实例
- Flex帮助文档(chm格式)制作及FAR的使用
- js Abba逆向前瞻正则匹配实例
- PHP批量去除BOM头内容信息代码
- linux下mysql乱码问题的解决方案
- J2SE中的序列化的认识
- JS自动倒计时30秒后按钮才可用(两种场景)