PHP面向对象编程入门教程

  1. /* 类的声明
  2. * 1.你要开发的是什么,确定写什么类
  3. * 2.类中的成员一定要属于这个类
  4. * [修饰类的关键字] class 类名{
  5. * 成员属性:
  6. * 成员方法:
  7. * }
  8. * 3.在类中声明成员属性时,前面必须有修饰词,当不确定使用哪个词时,使用var或public
  9. * 一个文件只保存一个类,文件名中包含类名,文件:类名.class.php
  10. * 类名的写法:
  11. * 变量:aaaBbbCcc
  12. * 函数:aaaBbbCcc
  13. * 常量:AAABBBCCC
  14. * 类名:AaaBbbCcc
  15. * 4.类中的成员属性,如果创建多个对象时,每个对象有不同的属性值时,不要直接给初值,在创建好对象之后再给值
  16. *
  17. *
  18. * 通过类来实例化对象
  19. * 1.使用的是new新建一个对象,加上类名,就是创建哪个类的对象
  20. * $对象引用=new 类名;
  21. * 2.只要有一个new 关键字就是创建一个对象,创建一个对象就是在内存中分配了一个空间
  22. *
  23. * 只有对象才在内存有存储空间
  24. *
  25. * 对象的作用
  26. *
  27. * 对象在内存中的分配
  28. *
  29. * 对象的使用
  30. * 对象中的成员必须通过对象的引用来访问
  31. * 对象->成员
  32. *
  33. * 对象->成员属性
  34. * 对象->成员方法
  35. *
  36. *
  37. *
  38. */
  39. -<?php
  40. class Something {
  41. // 在OOP类中,通常第一个字符为大写
  42. var $x;
  43. function setX($v) {
  44. // 方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea()
  45. $this->x=$v;
  46. }
  47. function getX() {
  48. return $this->x;
  49. }
  50. }
  51. ?>-

当然你可以按自已的喜好进行定义,但最好保持一种标准,这样会更有效,数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的,一个数据成员可 以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象.

方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this->name,否则对一个方法来说,它只能是局部变量.

使用new操作符来创建一个对象:$obj=new Something;

然后你可以使用成员函数通过:

  1. $obj->setX(5);
  2. $see=$obj->getX();

在这个例子中,setX成员函数将5赋值给对象的成员变量x(不是类的),然后getX返回它的值5.

你可以象:$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯,我强烈建议通过方法来存取成员变量,如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员,不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的.

继承在PHP中很容易实现,只要使用extend关键字,代码如下:

  1. <?php
  2. class Another extends Something {
  3. var $y;
  4. function setY($v) {
  5. $this->y=$v;
  6. }
  7. function getY() {
  8. return $this->y;
  9. }
  10. }
  11. ?>
  12. //类的声明(电话类)
  13. class Phone{
  14. //声明属性
  15. var $pinPai;
  16. var $color;
  17. var $batteryCapacity;
  18. var $screenSize;
  19. //成员方法
  20. function call(){
  21. }
  22. function message(){
  23. }
  24. function playMusic(){
  25. }
  26. function photo(){
  27. }
  28. }
  29. //类的实例化
  30. <?php
  31. class Something {
  32. var $x;
  33. function Something($y) {
  34. $this->x=$y;
  35. }
  36. function setX($v) {
  37. $this->x=$v;
  38. }
  39. function getX() {
  40. return $this->x;
  41. }
  42. }
  43. ?>

所以你可以创建一个对象,通过:$obj=new Something(6); 构造函数会自动地把6赋值给数据变量x,构造函数和方法都是普通的PHP函数,所以你可以使用缺省参数.

function Something($x="3",$y="5")

接着:

  1. $obj=new Something(); // x=3 and y=5
  2.   $obj=new Something(8); // x=8 and y=5
  3.   $obj=new Something(8,9); // x=8 and y=9

缺省参数使用C++的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数.

当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中显示调用,可以这样做是因为在派生类中所有父类的方法都是可用的.

  1. <?php
  2. function Another() {
  3. $this->y=5;
  4. $this->Something();
  5. //显示调用基类构造函数
  6. }
  7. ?>
  8. class Person{
  9. var $name;
  10. var $age;
  11. var $sex;
  12. function say(){
  13. }
  14. function eat(){
  15. }
  16. function run(){
  17. }
  18. }
  19. //实例化
  20. $p1=new Person;
  21. $p2=new Person;
  22. $p3=new Person;
  23. <?php
  24. $obj=new Classfoo();
  25. $str=serialize($obj);
  26. //保存$str到磁盘上
  27. //几个月以后
  28. //从磁盘中装入str
  29. $obj2=unserialize($str)
  30. ?>

你恢复了成员数据,但是不包括方法,根据文档所说,这导致了只能通过类似于使用$obj2->x来存取成员变量,你没有别的方法的唯一办法,所以不要在家里试它.

  1. //访问对象的成员
  2. $p1->name="zhangsan";
  3. echo $p1->name;