- 浏览: 53496 次
- 性别:
- 来自: 广州
最新评论
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 2913php导出excel 2010/02/01 10:33 最近 ... -
正则表达式匹配html 过滤非法字符
2011-06-14 10:50 1890正则表达式匹配html 过滤非法字符 匹配一个html标签,匹 ... -
iframe ie下设置无边框
2011-01-11 16:01 1636<iframe src="url“ id=&q ... -
php session_id() session_name()
2010-12-20 14:01 13431.Session.use_cookies:默认值 ... -
linux 下 apache启动、停止、重启命令
2010-12-17 20:00 902基本的操作方法: 本文假设你的apahce安装目录为/usr/ ... -
JavaScript escape() 函数
2010-12-10 17:03 1038JavaScript escape() 函数 定义和用法ht ... -
PHP中@符号的作用。
2010-12-07 16:12 913PHP代码中函数前面的@是什么意思? 【答】:@的作用是忽略 ... -
Ubuntu Linux下安装Zend Studio
2010-11-25 16:48 2064Ubuntu娱乐功能已经非常不错,无非是看看电影,听听歌 ... -
php ob_start 与 ob_end_flush()
2010-11-25 15:02 1478本文章主要讲关于php缓冲输出函数php ob_start 与 ... -
详解PHP ob_start()函数的功能要点
2010-11-25 15:00 999PHP函数的运用范围非常 ... -
php函数ob_start()、ob_end_clean()、ob_get_contents()
2010-11-25 14:59 1075下面3个函数的用法 ob_get_contents(); o ... -
Memcache基础教程
2010-11-25 14:58 737Memcache是什么 Memcache是danga.com的 ... -
PEAR的MDB2学习笔记
2010-11-10 14:57 1330■ 安装 需要安装两个包,一是MDB2本身基础类:[url= ... -
使用jquery不刷新前台页面完成提交表单的例子
2010-11-10 11:01 5822使用jquery不刷新前台页面完成提交表单的例子。 前台文件 ... -
php链接mysql数据库不能用localhost的解决方法
2010-11-09 16:57 1663网上看了好多解决的方 ... -
Pear MDB2安装及MDB2 Error: not found问题
2010-11-09 11:31 18161、选安装PEAR,点击php目录下的go-pear.bat, ... -
php教程 DOM解析xml文档实例
2010-11-05 11:22 1098<?php // php教程 domdocumen ... -
PHP中的COOKIE和SESSION使用技巧
2010-11-03 16:15 12871. PHP的COOKIE cookie 是一种在远程浏览器 ... -
PHP获取当前文件路径,上层目录路径
2010-11-02 14:44 5265PHP获取当前文件路径,上层目录路径 取的現在檔案、目錄、上 ... -
linux的chmod与chown命令详解
2010-11-01 14:53 731使用方式 : chmod [-cfvR] [--help] [ ...
相关推荐
PHP中静态方法(static)与非静态方法的使用及区别.docxPHP中静态方法(static)与非静态方法的使用及区别.docxPHP中静态方法(static)与非静态方法的使用及区别.docxPHP中静态方法(static)与非静态方法的使用及区别.docx
分析了php中静态类与静态变量用法类的区别,创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问。直接调用类方法量:class::attribute/function,无论是静态/...
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。 static的属性,在内存中只有一份,为所有的实例共用。 ...
静态属性、方法(包括静态与非静态)在内存中,只有一个位置(而非静态属性,有多少实例化对象,就有多少个属性)。 实例: <?php header("content-type:text/html;charset=utf-8"); class Human{ static ...
静态方法不需要所在类被实例化就可以直接使用。 静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。 静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个...
在PHP的非静态方法中可以调用静态方法 class test{ public static function strPrint(){ echo 'this is strPrint static function '; } public function staticFuncInvoke(){ self::strPrint(); } } $test...
在php中,访问类的方法/变量有两种方法: 1. 创建对象$object = new Class(),... b2) 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。 然后我们再看
static变量和普通变量的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内...
static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。 static的属性,在内存中只有一份,为所有的实例共用。 ...
本文实例分析了php中静态类与静态变量用法的区别。分享给大家供大家参考。具体分析如下: static是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了. 1. ...
本文实例讲述了laravel框架模型中非静态方法也能静态调用的原理.分享给大家供大家参考,具体如下: 刚开始用laravel模型时,为了方便一直写静态方法,进行数据库操作。 <?php namespace App\Models; use ...
用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。 就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向...
注意:Underscore.php的原作者是老牌PHP程序员,其中使用静态调用方式访问非静态方法时php会提示Strict Standards: Non-static method的严谨性警告,不过只需要在php脚本的头部添加: error_reporting(E_ALL & ~E_...
本文实例讲述了PHP面向对象程序设计中的self、static、parent关键字用法.分享给大家供大家参考,具体如下: ... 在静态函数中,self和static可以调用静态属性和静态函数(没有实例化类,因此不能调用非静态的
用::方式调用一个非静态方法会导致一个E_STRICT级别的错误。 就像其它所有的PHP静态变量一样,静态属性只能被初始化为一个字符值或一个常量,不能使用表达式。 所以你可以把静态属性初始化为整型或数组,但不能指向...
可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 1、...
本文实例讲述了php5.3后静态绑定用法...当进行非静态方法调用时,即为该对象所属的类。所谓的”转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及 forward_static
今天来总结下。 、在类的内部方法访问已经声明为const及static的属性时,使用self::$name的形式。注意的是const属性的申明格式,const PI=3.14,... } //这种写法有误,静态方法不能访问非静态属性 public static funct
PHP静态延迟绑定和普通静态效率的对比 只是一个简单的小实验,对比了下 延迟绑定 和 非延迟的效率 延迟绑定主要就是使用 static 关键字来替代原来的 self ,但功能非常强大了 实验代码: class A { protected ...
Declaring class members or methods as static makes them accessible without needing an instantiation of the class. A member declared...(类的静态方法可以)。//注意看第一个例子,在一个非静