过程与对象的哲学
- 面向过程和面向对象都属于编程范式的一种;
- 面向过程认为:
- 每个小系统都有着明确的开始和明确的结束,开始和结束之间都有着严谨的因果关系。
- 只要我们将这个小系统中的每一个小步骤和影响这个小系统走向的所有因素都分析出来!
- 我们就能完全定义这个系统的行为。
- 总结:作为上帝,你创造着每一步,事无巨细;
面向过程:
- 任何程序中或者逻辑或者if判断中可能发生的情况,全部考虑到;
面向对象:
- 假如有一个删除数据库的功能,你不需要指定它什么时候执行,你只要把这个功能做出来就行了
- 例如,人都会呼吸,上帝只要创造一次呼吸的功能就行,至于什么时候呼吸,你人自己决定!
计算机中的面向对象
类与对象的定义
- 声明类语法:
class 类名 {
...
}
这个类没有任何属性和方法;
- 创建一个 【人】 类
class Ren {
//public是修饰符,用于修饰属性或者方法
public $name = '小明';
public $age = 1;
public $height = '20cm';
public function ku(){
echo '我哭了';
}
}
- 实例化类
- 语法:
new 类名([参数列表]);
返回一个实例对象
- 示例:
$ren1 = new Ren();
echo $ren1->name; // 小明
echo $ren1->age; //1
echo $ren1->height; //20cm
$ren1->ku(); // 我哭了
// “->”这个符号,类似于中文语义中 “的” 的意思;
// $ren1 -> name; 意思就是,对象$ren1 的 name 属性;
声明类的时候注意点
- 1:关于属性值,可以声明属性并赋值,也可以声明属性先不赋值
class Ren {
public $age = 20;
public $name;
}
$a = new Ren();
$a->age; // 0;
$a->name; // NULL,声明属性,不赋值,则属性的值为NULL
- 2:关于PHP中的类,请注意,属性必须是一个直接的值,也就是字面量;不能是一个计算结果;
class Ren {
public $age = 20+20;
}
//这样写是错的
- 系统内置函数不能被作为新的函数被重新定义,不能重复定义函数
- 在 类 中,可以声明与内置函数重名的函数
构造函数(实例化对象开始阶段会调用)
- 在类中,初始化对象,改变它的初始状态,这个 东西叫做 构造函数;
__construct()
; - 构造函数在实例化类的时候会被使用到,其它时间,它不起任何作用;每次
new
新实例的时候,构造函数会被调用执行; - 如果没有构造函数,那么所谓的在实例化对象的时候,想要通过参数来对实例对象进行初始化,是不可能实现的;
- 示例:
class Ren {
public function __construct($name,$age){
$this -> name = $name;
$this -> age = $age;
}
public $name = null;
public $age = null;
}
$ren1 = new Ren('张三',20);
var_dump($ren1 -> name); // 张三
//当你 new className($arguments)时,这个参数就是保存在了$arguments 中,然后再传递给 __construct()函数中;
- 一个类的声明过程
析构函数(实例对象被销毁时调用)
当实例对象被销毁时,则调用析构函数,进行一些操作:
__destruct()
;示例:
class Ren {
public $name = null;
public $age = null;
public function __construct($name,$age){
echo '实例对象被创建';
$this -> name = $name;
$this -> age = $age;
}
public function __destruct(){
echo '实例对象被销毁';
}
}
$lisi = new Ren('张三',201);
var_dump($lisi->name);
var_dump($lisi->age);
unset($lisi);
- 对象的销毁?
- 显式的销毁,就是手动销毁,例如将一个对象unset、置为NULL、置为false等
- 隐式的销毁,PHP语言有自动回收垃圾的机制,在整个PHP脚本执行完毕之后,如果对象没有被继续使用,则销毁;
- 在PHP中,内存泄漏的问题,一般情况下不会轻易出现;