PHP面向对象static修饰词的使用方法
2016-06-30 22:16
239 查看
之前在工作中经常遇到static修饰词,就在网上找资料,但是找到的资料都千篇一律,说的含糊其辞,感觉都是转载,抄过来的,没有一点创新,所以自己专门研究了一下,下面分享给大家,如果有什么不准确的,希望给予指正
1.static修饰词可以修饰属性和方法,但是不能修饰类
2.如果了解php面向对象内存分配机制,就知道,有一部分内存为初始化静态段,初始化静态段主要存放的是对象里面的常量和静态属性和静态方法,所以用static修饰的属性或者方法都存放在初始化静态段。
3.初始化静态段的内容可以被所有同一个类的对象公用,比如你把同一个类实例化了好多次,那么被static修饰过的属性或者方法就能被这些实例化的类公用,而不用再去一个类一个类地赋值,处理
举个例子看看静态和非静态属性的区别
class Favorite{
public $age = '23';
public static $name = 'xian';
}
$new1 = new Favorite();
$new2 = new Favorite();
$new3 = new Favorite();
$new4 = new Favorite();
$new1 :: $name = '西安';
$new1 -> age = 110;
$new2 :: $name = '兰州';
$new2 -> age = 120;
$new3 :: $name = '北京';
$new3 -> age = 130;
$new4 :: $name = '上海';
$new4 -> age = 140;
echo '1:'.$new1 :: $name.'<br/>';
echo '2:'.$new2 :: $name.'<br/>';
echo '3:'.$new3 :: $name.'<br/>';
echo '4:'.$new4 :: $name.'<br/>';
// 可以看到静态属性输出的都是同一个值,尽管在上面我们把静态属性的值变了,但是他只输出了我们最后设定的值
4.静态的属性或者方法要用类来访问
1.static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。
2.static的属性,在内存中只有一份,为所有的实例共用。
3.一个类的所有实例,共用类中的静态属性。
也就是说,在内存中即使有多个实例,静态的属性也只有一份。
4.静态属性公用特性
1.static修饰词可以修饰属性和方法,但是不能修饰类
public static $name='tancy'; public static function user(){ ........ }
2.如果了解php面向对象内存分配机制,就知道,有一部分内存为初始化静态段,初始化静态段主要存放的是对象里面的常量和静态属性和静态方法,所以用static修饰的属性或者方法都存放在初始化静态段。
3.初始化静态段的内容可以被所有同一个类的对象公用,比如你把同一个类实例化了好多次,那么被static修饰过的属性或者方法就能被这些实例化的类公用,而不用再去一个类一个类地赋值,处理
举个例子看看静态和非静态属性的区别
class Favorite{
public $age = '23';
public static $name = 'xian';
}
$new1 = new Favorite();
$new2 = new Favorite();
$new3 = new Favorite();
$new4 = new Favorite();
$new1 :: $name = '西安';
$new1 -> age = 110;
$new2 :: $name = '兰州';
$new2 -> age = 120;
$new3 :: $name = '北京';
$new3 -> age = 130;
$new4 :: $name = '上海';
$new4 -> age = 140;
echo '1:'.$new1 :: $name.'<br/>';
echo '2:'.$new2 :: $name.'<br/>';
echo '3:'.$new3 :: $name.'<br/>';
echo '4:'.$new4 :: $name.'<br/>';
// 可以看到静态属性输出的都是同一个值,尽管在上面我们把静态属性的值变了,但是他只输出了我们最后设定的值
”上海“,可以导出《一个类的所有实例,共用类中的静态属性。》
echo '1:'.$new1 -> age.'<br/>'; echo '2:'.$new2 -> age.'<br/>'; echo '3:'.$new3 -> age.'<br/>'; echo '4:'.$new4 -> age.'<br/>';
4.静态的属性或者方法要用类来访问
class FavtoryBoy{ public $name; public $age; public static $school = '北大'; } // 访问静态属性 echo FavtoryBoy::$school;
1.static 的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。
2.static的属性,在内存中只有一份,为所有的实例共用。
3.一个类的所有实例,共用类中的静态属性。
也就是说,在内存中即使有多个实例,静态的属性也只有一份。
4.静态属性公用特性
相关文章推荐
- php一些应用技巧汇总
- php上传文件失败解决方式
- C#/PHP调用有SoapHeader的WebService
- php 上传文件实例 上传并下载word文件
- php 上传文件实例 注册账号
- php 文件上传
- php 关联数据库的留言板练习
- PHP接触
- [PHP]Yaf + composer 引起大幅性能下降
- php学习第一天
- Think PHP(TP)框架的基本使用 (三)
- vs2013开发php环境配置
- Yii1 跨模块调用模型
- 【Matplotlib】线设置,坐标显示范围
- 添加图片水印 PHP实现
- 简单的存储图片的云盘 PHP实现
- 推荐 IIS7.0下ThinkPHP提示“缓存文件写入失败!” 需要设置user的权限即可 Home/Runtime/Cache/
- IIS10搭建FTP服务
- php面向对象程序设计(OOP)的61条准则
- PHP自增(++)中的一些奇葩问题研究记录