您的位置:首页 > 编程语言 > PHP开发

php面向对象和面向过程

2016-07-24 14:23 591 查看
面向过程的PHP

有如下两个文件

test1.php

<?php

     function aa(){

     echo 'haha';

      }

     $b = 1;

?>

test2.php

<?php

       include 'test1.php';

      function aa(){

      echo 'lala';

      }

      function bb(){

       global $b;

       $b = $b + 1;

       }

      aa();

      bb();

      echo $b;

}

文件2和文件1中存在同名函数,此刻会立即报错,不容许这样的复用情况出现,而且,对于全局变量$b,在文件2中其值改变,发生全局变量的污染,造成不可预知的麻烦,这就是面向过程的弊端。于是采用面向对象的方法来解决这个问题,将变量和方法进行封装,(js中是没有类class的,而php有)有三种形式来表现:

1.成员变量  成员方法(动态 ,静态),说说动态的。

class Person{

 public static $name = 1;

 public static function index(){

 echo '123';

 }

}

echo Person::$name;

Person::index();

}

2.构造函数  析构函数  (想到当给内部的成员方法传参的时候。。。污染全局变量)

class Person{

   public $x;

   public $y;

   public function__construct($x,$y){//初始化变量

            $this->x= $x;

           $this->y = $y;

    }

    public function index(){

    $k = $this->x + 1;

    echo $k;

    }

}

$per = new Person(5,1);

$per->index();

继承

class pupil{

       public function __construct(){

                parent::__construct();//这时候的parent 相当于Person,调用父类的构造函数

       }

}

$per = new Person();

$per->index();

单独仅仅执行如上代码,会报错,找不到父类,故应该有如下形式:

class pupil extend Person{

}

所以

class pupil extend Person{

       public function __construct(){

                parent::__construct();//这时候的parent 相当于Person,调用父类的构造函数

       }

}

3.PHP在类封装中提供了三个访问控制符号 public private protected

public 表全局  可以在本类 、类外部(如实例化的时候)、 子类中使用

protected 表示受保护 可以在本类、子类中调用

private 表示私有 只能在本类中调用

class Person{

   public $name;

   protected $age;

   private $salary;

   public function __construct($name ,$age , $salary){

         $this->name = $name;

         $this->age = $age;

         $this->salary = $salary;

    }

    public function showinfo(){

          echo $this->name."||".$this->age."||".$this->salary;

    }

}

 $p = new Person('sword',10 , 30)

echo $p->name;

echo $p->age;//无法输出

echo $p->salary;;//无法输出

如果要想访问age and salary,PHP提供了魔术方法:

class Person{

     private $n1;

     private $n2;

      public function __set($name,$value);//通过使用__set方法设置管理属性

      {

             $this->name = $value;

      }

      public function __get()

      {

             if(isset($name)){

                    return $this->name;

              }else{

                   return null;

              }

      }

}

$q = new Person();

$q->n1 = 'hello';

echo $q->n1;

////////////////正常情况下,如同java中的get and set方法一样,但是

public function set($value){

    $this->n1 = $value;

}

public function get(){

     return  $this->n1;

}

$p = new Person();

$a->set('helllo');

echo $a->get();

php中的魔术方法就有那么几种而已。

            

面向对象的继承

(1)子类最多只能继承一个父类(直接继承)

(2)子类可以继承其父类的public protected的成员变量和成员方法

(3)parent::__construct()在子类中的构造函数里面必须写

(4)如果子类中需要访问父类中的public protected的方法 采用父类名::父类的成员方法

(5)如果子类中方法和父类的方法相同,称为方法重写

classs A{

  public function aa(){

}

}

class B extends A{

   public function __construct(){

   }

   public function bb(){

     A::aa();

   }

}

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 面向对象