编程语言在发展过程中大致经历了三个阶段,早期开发面临的情况是简单重复的科学计算,机械笨重的硬件平台,因此编程语言要尽可能的贴近底层,便于开发。随着软硬件技术水平的进步,编程语言也取得了长足的发展,从最初面向机器的汇编语言,到后来面向过程的C语言(封装函数,便于功能的复用),再到现在面向对象的java、PHP(封装对象,便于组建的复用),编程语言越来越接近自然语言和自然人的思维方式,这一改变大大降低了编程语言学习的门槛。可以展望,在不远的未来,我们很有可能用自然语言去编写程序,正是这样一层一层的封装,把内部结构包裹起来,只暴露外部接口,将我们的开发过程和底层隔离开,因此抽象和封装是现代编程语言最重要的特点,也是现代社会运行分工协作的方式。
类和对象
类的创建
- 成员属性,可以是基本数据类型或符合数据类型
- 构造方法,默认的访问修饰符是public
- 析构方法,主要作用是释放资源,例如数据库连接,图片资源等,并非销毁对象本身(即无默认的析构方法)
- 成员方法,默认的访问修饰符是public
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Animal { public $kind; public $number; public function __construct($kind,$number){ $this->kind=$kind; $this->number=$number; } function __destruct(){ echo "$this->kind被销毁"; } public function walk(){ echo "walking"; } public function eat($food){ echo "eating".$food; } }
|
对象的创建
1 2 3 4 5
| $cat=new Animal("未定义",0); $dog=new Animal("未定义",0); var_dump($cat); var_dump($dog);
|
访问对象
1 2 3 4 5 6
| $cat->kind="猫科"; $cat->number=2; $dog->kind="犬科"; $dog->number=3; var_dump($cat); var_dump($dog);
|
1 2
| $cat->walk(); $cat->eat(" meat");
|
对象的内存模型
对象创建时在栈中存放变量名同时在堆中开辟空间用于存放真正的对象,变量名保存的是指向堆中对象位置的地址,因此PHP当中对象是按引用传递的,每个对象的变量都持有对象的引用,而非对象的拷贝
1 2
| $tiger=$cat; echo $tiger->kind;
|
静态变量和静态方法
- 静态变量 static 与其相对的成为实例变量,同一个类的所有对象都共享的变量
- 类外部可以直接用类名访问静态变量,意味着静态变量不依赖于对象而存在
- 静态方法(类方法) static 不能访问非静态属性,普通成员方法可以访问静态变量和非静态变量
- 类外部可以直接用类名访问静态方法,意味着静态变量不依赖于对象而存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| class People { public $name; public static $num = 0; function __construct($name) { $this->name=$name; $this->num=20; } static function get_num() { echo self::$num; } function add() { People::$num++; self::$num++;
echo $this->name."加入";
self::get_num(); People::get_num(); } } $p1 = new People("Tom"); $p1->add();
echo People::$num;
$p1->get_num();
People::get_num();
|