首页 > 语言 > PHP > 正文

PHP面向对象编程入门教程

2024-09-04 11:43:43
字体:
来源:转载
供稿:网友
  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.  
  40. -<?php 
  41.  
  42. class Something {  
  43. // 在OOP类中,通常第一个字符为大写  
  44. var $x;  
  45. function setX($v) {  
  46. // 方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea()  
  47. $this->x=$v;  
  48. }  
  49. function getX() {  
  50. return $this->x;  
  51. }  
  52. }  
  53. ?>- 

当然你可以按自已的喜好进行定义,但最好保持一种标准,这样会更有效,数据成员在类中使用"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. //类的声明(电话类) 
  14. class Phone{ 
  15.  //声明属性 
  16.  var $pinPai
  17.  var $color
  18.  var $batteryCapacity
  19.  var $screenSize
  20.  
  21.  //成员方法 
  22.  function call(){ 
  23.  
  24.  } 
  25.  
  26.  function message(){ 
  27.  
  28.  } 
  29.  
  30.  function playMusic(){ 
  31.  
  32.  } 
  33.  
  34.  function photo(){ 
  35.  
  36.  } 
  37.  
  38. //类的实例化 
  39.  
  40. <?php 
  41.  
  42. class Something {  
  43. var $x
  44.  
  45. function Something($y) {  
  46. $this->x=$y;  
  47.  
  48. function setX($v) {  
  49. $this->x=$v;  
  50.  
  51. function getX() {  
  52. return $this->x;  
  53. }  
  54. ?> 

所以你可以创建一个对象,通过:$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.  
  9. class Person{ 
  10.  
  11.  var $name
  12.  var $age
  13.  var $sex
  14.  
  15.  function say(){ 
  16.  
  17.  } 
  18.  
  19.  function eat(){ 
  20.  
  21.  } 
  22.  
  23.  function run(){ 
  24.  
  25.  } 
  26. //实例化 
  27. $p1=new Person; 
  28. $p2=new Person; 
  29. $p3=new Person; 
  30.  
  31. <?php 
  32.  
  33. $obj=new Classfoo();  
  34. $str=serialize($obj); 
  35.  
  36. //保存$str到磁盘上  
  37. //几个月以后 
  38. //从磁盘中装入str 
  39. $obj2=unserialize($str)
  40. ?> 

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表