PHP回顾(面向对象)
2024-10-06 22:47:21
类中的成员属性不能够用函数为其赋值。public age = rand(1,100);//这是错误的;
__get() __set() __isset() __unset()
final 用来修饰成员方法或类,被final修饰的类不能被继承,final修饰的方法不能重载。参考博客
const 定义的常量归类所有。类名::常量名 方式访问
statics 成员方法中使用了$this,那么这个成员方法就不能用statics修饰.
parent指向父类,可以访问父类的静态常量、静态属性,不能访问父类的非静态属性,可以调用父类的方法(不能是private方法,无论是否静态)
对象串行化:serialize() 默认情况是把整个对象串行化,准确说是对象里的属性,如果我只想串行化指定的成员属性。那需要使用一个魔术方法 __sleep() ,调用serialize时触发。还有一个 __wakeup() 是在调用unserialize() 触发, 作用是在反串行化的时候可以修改成员属性。
__tostring() 使用echo输出对象时触发。验证码类可以使用来简化操作。
克隆:由于把一个对象赋值给另一个变量的时候默认是引用的(不是把值传递给另一个变量)。所以需要clone,才能得到一个新的一样的对象,改变其中一个对象的时候,另一个不会变。如果说克隆的时候想要改变某些属性,需要使用__clone() 在clone的时候触发。
class SubObject
{
static $instances = 0;
public $instance; public function __construct() {
$this->instance = ++self::$instances;
} public function __clone() {
$this->instance = ++self::$instances;
}
} class MyCloneable
{
public $object1;
public $object2; function __clone()
{ // 强制复制一份this->object, 否则仍然指向同一个对象
$this->object1 = clone $this->object1;
}
} $obj = new MyCloneable(); $obj->object1 = new SubObject();
$obj->object2 = new SubObject(); $obj2 = clone $obj; echo '<pre>';
print("Original Object:\n");
print_r($obj); print("Cloned Object:\n");
print_r($obj2); //手册中的示例
__call() 调用类中不存在的方法时触发。
__autoload()
单例设计模式:
<?php class Mysql{
static private $link = null;
private function __construct(){
echo 1111;
} static public function connect(){
if(is_null(self::$link)){
self::$link = new self;//new self 是实例化
}
return self::$link;
}
}
//这样就实现了一个简单的单例设计模式
Mysql::connect(); //无论调用多少次这个方法,都只会输出一个
最新文章
- SQL Server:APPLY表运算符
- log4j配置详解
- MineCraft note
- PHP移动文件指针ftell()、fseek()、rewind()总结
- asp.net的简易的参数化查询
- ecshop去掉“云服务中心”或者是“模板堂知识库”
- 再说vundle: 完全vim字符编程的四个必须插件 - zen coding 和emmet插件的使用
- UVALive 7297 bfs
- boost::asio 使用实例
- mongodb的优化
- callback用法简介
- 快学Scala-第一章 基础
- PHP 文件上传全攻略
- RN 导入原有Xcode项目中,引入Pod依赖出现的问题与解决
- 初次使用git配置以及git如何使用ssh密钥(将ssh密钥添加到github)
- SSH中的Invalid action class configuration that references an unknown class named.......
- 理解 .NET 2015
- P4381 [IOI2008]Island(基环树+单调队列优化dp)
- 7.6 C++基本序列式容器效率比较
- Refused to execute inline event handler because it violates the following Content Security Policy directive: ";xxx";. Either the &#39;unsafe-inline&#39; keyword, a hash (&#39;sha256-...&#39;), or a nonce (&#39;nonce-...&#39;)