- 浏览: 54907 次
- 性别:
- 来自: 广州
最新评论
static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”
如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。
static关键字可以用来修饰变量、方法。
不经过实例化,就可以直接访问类中static的属性和static的方法。
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调
用。
static的属性,在内存中只有一份,为所有的实例共用。
使用self:: 关键字访问当前类的静态成员。
一个类的所有实例,共用类中的静态属性。
也就是说,在内存中即使有多个实例,静态的属性也只有一份。
下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。
这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。
静态属性直接调用
静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。
使用的方式是: 类名::静态属性名
类没有创建,静态属性就可以直接使用。那静态属性在什么时候在内存中被创建? 在PHP中没有看到相关的资料。引用Java中的概念,来解释应该也具有通用性
。静态属性和方法,在类被调用时创建。
静态方法
静态方法不需要所在类被实例化就可以直接使用。
使用的方式是类名::静态方法名
下面我们继续写这个Math类,用来进行数学计算。我们设计一个方法用来算出其中的最大值。既然是数学运算,我们也没有必要去实例化这个类,如果这个方法
可以拿过来就用就方便多了。我们这只是为了演示static方法而设计的这个类。在PHP提供了 max() 函数比较数值。
view plaincopy to clipboardprint?
静态方法如何调用静态方法
第一个例子,一个静态方法调用其它静态方法时,使用self::
静态方法调用静态属性
使用self:: 调用本类的静态属性。
静态方法不能调用非静态属性 。不能使用self::调用非静态属性。
也不能使用 $this 获取非静态属性的值。
静态方法调用非静态方法
PHP5中,在静态方法中不能使用 $this 标识调用非静态方法。
当一个类中有非静态方法被self:: 调用时,系统会自动将这个方法转换为静态方法。
static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”
如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。
static关键字可以用来修饰变量、方法。
不经过实例化,就可以直接访问类中static的属性和static的方法。
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调
用。
static的属性,在内存中只有一份,为所有的实例共用。
使用self:: 关键字访问当前类的静态成员。
一个类的所有实例,共用类中的静态属性。
也就是说,在内存中即使有多个实例,静态的属性也只有一份。
下面例子中的设置了一个计数器$count属性,设置private 和 static 修饰。
这样,外界并不能直接访问$count属性。而程序运行的结果我们也看到多个实例在使用同一个静态的$count 属性。
<?php class user { private static $count = 0 ; //记录所有用户的登录情况. public function __construct() { self::$count = self::$count + 1; } public function getCount() { return self::$count; } public function __destruct() { self::$count = self::$count - 1; } } $user1 = new user(); $user2 = new user(); $user3 = new user(); echo "now here have " . $user1->getCount() . " user"; echo "<br />"; unset($user3); echo "now here have " . $user1->getCount() . " user"; ?>
静态属性直接调用
静态属性不需要实例化就可以直接使用,在类还没有创建时就可以直接使用。
使用的方式是: 类名::静态属性名
<?php class Math { public static $pi = 3.14; } // 求一个半径3的园的面积。 $r = 3; echo "半径是 $r 的面积是<br />"; echo Math::$pi * $r * $r; echo "<br /><br />"; //这里我觉得 3.14 不够精确,我把它设置的更精确。 Math::$pi = 3.141592653589793; echo "半径是 $r 的面积是<br />"; echo Math::$pi * $r * $r; ?>
类没有创建,静态属性就可以直接使用。那静态属性在什么时候在内存中被创建? 在PHP中没有看到相关的资料。引用Java中的概念,来解释应该也具有通用性
。静态属性和方法,在类被调用时创建。
静态方法
静态方法不需要所在类被实例化就可以直接使用。
使用的方式是类名::静态方法名
下面我们继续写这个Math类,用来进行数学计算。我们设计一个方法用来算出其中的最大值。既然是数学运算,我们也没有必要去实例化这个类,如果这个方法
可以拿过来就用就方便多了。我们这只是为了演示static方法而设计的这个类。在PHP提供了 max() 函数比较数值。
view plaincopy to clipboardprint?
<?php class Math { public static function Max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } } $a = 99; $b = 88; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo Math::Max($a, $b); echo "<br />"; echo "<br />"; echo "<br />"; $a = 99; $b = 100; echo "显示 $a 和 $b 中的最大值是"; echo "<br />"; echo Math::Max($a,$b); ?>
静态方法如何调用静态方法
第一个例子,一个静态方法调用其它静态方法时,使用self::
<?php // 实现最大值比较的Math类。 class Math { public static function Max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function Max3($num1, $num2, $num3) { $num1 = self::Max($num1, $num2); $num2 = self::Max($num2, $num3); $num1 = self::Max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 88; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo Math::Max3($a, $b, $c); ?>
静态方法调用静态属性
使用self:: 调用本类的静态属性。
<?php // class Circle { public static $pi = 3.14; public static function circleAcreage($r) { return $r * $r * self::$pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r); ?>
静态方法不能调用非静态属性 。不能使用self::调用非静态属性。
<?php // 这个方式是错误的 class Circle { public $pi = 3.14; public static function circleAcreage($r) { return $r * $r * self::pi; } } $r = 3; echo " 半径 $r 的圆的面积是 " . Circle::circleAcreage($r); ?>
也不能使用 $this 获取非静态属性的值。
静态方法调用非静态方法
PHP5中,在静态方法中不能使用 $this 标识调用非静态方法。
<?php // 实现最大值比较的Math类。 class Math { public function Max($num1, $num2) { echo "bad<br />"; return $num1 > $num2 ? $num1 : $num2; } public static function Max3($num1, $num2, $num3) { $num1 = $this->Max($num1, $num2); $num2 = $this->Max($num2, $num3); $num1 = $this->Max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 188; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo Math::Max3($a, $b, $c); //同样的这个会报错 ?>
当一个类中有非静态方法被self:: 调用时,系统会自动将这个方法转换为静态方法。
<?php // 实现最大值比较的Math类。 class Math { public function Max($num1, $num2) { return $num1 > $num2 ? $num1 : $num2; } public static function Max3($num1, $num2, $num3) { $num1 = self::Max($num1, $num2); $num2 = self::Max($num2, $num3); $num1 = self::Max($num1, $num2); return $num1; } } $a = 99; $b = 77; $c = 188; echo "显示 $a $b $c 中的最大值是"; echo "<br />"; echo Math::Max3($a, $b, $c); ?>
发表评论
-
PHP导出excel表格,PHP导出Excel报表,PHP导出Xls表格!
2011-10-19 14:19 2981php导出excel 2010/02/01 10:33 最近 ... -
正则表达式匹配html 过滤非法字符
2011-06-14 10:50 1927正则表达式匹配html 过滤非法字符 匹配一个html标签,匹 ... -
iframe ie下设置无边框
2011-01-11 16:01 1701<iframe src="url“ id=&q ... -
php session_id() session_name()
2010-12-20 14:01 13801.Session.use_cookies:默认值 ... -
linux 下 apache启动、停止、重启命令
2010-12-17 20:00 981基本的操作方法: 本文假设你的apahce安装目录为/usr/ ... -
JavaScript escape() 函数
2010-12-10 17:03 1094JavaScript escape() 函数 定义和用法ht ... -
PHP中@符号的作用。
2010-12-07 16:12 986PHP代码中函数前面的@是什么意思? 【答】:@的作用是忽略 ... -
Ubuntu Linux下安装Zend Studio
2010-11-25 16:48 2123Ubuntu娱乐功能已经非常不错,无非是看看电影,听听歌 ... -
php ob_start 与 ob_end_flush()
2010-11-25 15:02 1527本文章主要讲关于php缓冲输出函数php ob_start 与 ... -
详解PHP ob_start()函数的功能要点
2010-11-25 15:00 1056PHP函数的运用范围非常 ... -
php函数ob_start()、ob_end_clean()、ob_get_contents()
2010-11-25 14:59 1113下面3个函数的用法 ob_get_contents(); o ... -
Memcache基础教程
2010-11-25 14:58 769Memcache是什么 Memcache是danga.com的 ... -
PEAR的MDB2学习笔记
2010-11-10 14:57 1368■ 安装 需要安装两个包,一是MDB2本身基础类:[url= ... -
使用jquery不刷新前台页面完成提交表单的例子
2010-11-10 11:01 5864使用jquery不刷新前台页面完成提交表单的例子。 前台文件 ... -
php链接mysql数据库不能用localhost的解决方法
2010-11-09 16:57 1701网上看了好多解决的方 ... -
Pear MDB2安装及MDB2 Error: not found问题
2010-11-09 11:31 18791、选安装PEAR,点击php目录下的go-pear.bat, ... -
php教程 DOM解析xml文档实例
2010-11-05 11:22 1129<?php // php教程 domdocumen ... -
PHP中的COOKIE和SESSION使用技巧
2010-11-03 16:15 13321. PHP的COOKIE cookie 是一种在远程浏览器 ... -
PHP获取当前文件路径,上层目录路径
2010-11-02 14:44 5329PHP获取当前文件路径,上层目录路径 取的現在檔案、目錄、上 ... -
linux的chmod与chown命令详解
2010-11-01 14:53 764使用方式 : chmod [-cfvR] [--help] [ ...
相关推荐
理解静态方法和非静态方法的使用和区别是掌握PHP面向对象编程的关键。 静态方法是通过类名直接调用的,无需创建类的实例。这使得它们在某些情况下非常有用,比如当一个方法不需要访问类的实例变量,或者当需要在类...
静态变量不仅可以在函数中使用,还可以作为类的静态属性使用。静态属性是属于类本身的,而不是类的某个实例。这意味着静态属性在所有实例之间共享。例如: ```php class Nowamagic { public static $nm = 1; ...
静态方法和非静态方法的主要用法区别体现在以下几个方面: 1. 访问限制:静态方法不能直接访问非静态的属性和方法,因为静态成员是属于类级别的,而非静态成员是属于对象实例级别的。由于静态成员的创建和调用不...
4. 静态方法可以调用非静态方法,但需避免使用 `$this`,可使用 `self::` 或通过实例调用来实现。 了解这些基础知识后,开发者可以更好地利用静态属性和方法来优化代码结构,特别是在处理全局状态、单例模式或者...
在PHP编程中,静态方法和非静态方法是两种不同的成员函数类型,它们有着明显的区别和各自的使用场景。静态方法的特点在于它们与类关联,而非与类的实例关联,这意味着你可以直接通过类名来调用静态方法,而无需先...
在PHP编程语言中,静态调用非静态方法是一种特殊情况,虽然在Java或C#等静态类型语言中会被编译器捕获并报错,但在PHP这样的动态语言中却是可行的,尽管并不推荐。PHP允许这样的调用主要是为了保持向后兼容,尤其是...
在PHP编程语言中,类的方法可以被分为静态方法(static methods)和非静态方法(non-static methods)。理解这两种类型方法的差异以及它们之间如何相互调用对于编写面向对象的代码非常重要。 首先,我们来介绍静态...
`result()`方法则是一个非静态方法,它内部调用了`compare()`方法来找出三个数中的最大值。 #### 直接调用静态属性和静态方法 除了通过类的实例来访问静态属性和静态方法之外,还可以直接通过类名来访问。 ```php...
分析了php中静态类与静态变量用法类的区别,创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。直接调用类方法量:class::attribute/function,无论是静态/...
- 静态方法不能访问非静态方法或变量,因为它们可能依赖于实例的特定状态。 总之,`static`关键字在PHP中提供了对类静态成员的支持,使得开发者可以编写更加灵活且高效的代码。理解和正确使用静态变量和方法对于...
### 静态方法与非静态方法的交互 虽然静态方法不能直接访问非静态属性,但它们可以调用非静态方法。在调用非静态方法时,需要通过`self`关键字将其转换为静态,如下所示: ```php class ClassName { static ...
3. 尽管可以使用`class::...`调用非静态方法,但必须确保该方法不依赖实例变量,否则会导致错误。 静态成员的存在使得开发者能够在不创建对象的情况下与类进行交互,这对于轻量级操作和不需要实例化对象的场景非常...
在PHP编程语言中,静态属性(Static Properties)和静态方法(Static Methods)是面向对象编程中的重要概念,它们可以让我们在不创建类的实例的情况下使用属性和方法,从而实现一些特殊的功能和用途。 静态属性是指...
4. **静态与非静态方法的交互**: 静态方法可以调用非静态方法,反之则不行。如果尝试在静态方法中调用非静态方法,会导致错误,因为非静态方法需要对象实例来调用。 5. **静态属性**: 类的静态属性同样不依赖于...
静态变量与普通成员变量(非静态)的最大区别在于它的生命周期。普通成员变量在每次对象实例化时都会创建新的副本,而静态变量只会在第一次调用时初始化,并在整个类的生命周期内共享,不随对象的创建销毁而变化。...
本资料“PHP面向对象之旅深入理解static变量与方法”旨在帮助开发者深入理解PHP中的静态(static)变量和静态方法,这些都是OOP的重要组成部分。下面我们将详细探讨这两个概念。 1. 静态变量 静态变量是在类中定义...
静态方法不需要所在类被实例化就可以直接使用。 静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个...
4. **复用性**:在类的方法中,非静态变量每个实例都有自己的一份副本,而静态变量所有实例共享同一份。 例如: ```php class MyClass { public static $counter = 0; public function incrementCounter() { ...