加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP面向对象的程序设计封装--php高级最详细教程

发布时间:2022-09-26 11:18:34 所属栏目:PHP教程 来源:
导读:  class Proson{

  //类里面,不能使用函数作为值

  //类里面,不能使用变量作为值

  //类里面,可以使用常量作为值

  var $name = ’小伟‘; //一种赋默认值的方式

  va
  class Proson{
 
  //类里面,不能使用函数作为值
 
  //类里面,不能使用变量作为值
 
  //类里面,可以使用常量作为值
 
  var $name = ’小伟‘; //一种赋默认值的方式
 
  var $sex;
 
  var $age;
 
  function say(){
 
  echo "我的名字是:{$this->name},我的性别是:{$this->sex},我的年龄是:{$this->age}。
 
  ";
 
  }
 
  function run(){
 
  }
 
  function eat(){
 
  }
 
  }
 
  实例化对象语法:
 
  通过类来实例化对象
 
  1. 使用的是new 新建一个对象,加上类名,就是创建那个类的对象
 
  $对象引用=new 类名;
 
  $对象名称 = new 类名称();
 
  $对象名称 = new 类名称(构造参数);
 
  2. 只要有一个new 关键字就是创建一个对象,创建一个对象就在内存中分配了一个空间
 
  只有对象才在内存有存储空间
 
  把此类实例化对象
 
  //实例化多个对象$p、$p1、$p2
 
  $p = new Proson;
 
  $p1 = new Proson;
 
  $p2 = new Proson;
 
  $p3 =$p1;
 
  //对象成员属性赋值
 
  $p->name = "vilin"; //$p对象赋值
 
  $p->sex = "男神"; //$p对象赋值
 
  $p->age = 19; //$p对象赋值
 
  对象类型在内存中的分配:
 
  对象中成员的访问:
 
  //对象访问自身对象的成员属性和成员方法(取值)
 
  //后面的成员属性前面不要加 $符号,否则就变成了可变变量。
 
  echo $p->name; //vilin
 
  echo $p->sex; // 男神
 
  echo $p->age;//19
 
  $p->say(); //调用成员方法
 
  echo $p1->name; //使用默认值 小伟
 
  echo $p1->sex; //var_dump($p1->sex) 为NULL,因为没有赋值
 
  对象比较:
 
  //在用逻辑运算来判断对象的时候,只要所有成员属性全相等php引用面向对象教程php引用面向对象教程,那么用 == 来判断则返回 true
 
  //如果用 === 来判断则返回 false
 
  // === 在对象的判断上,意思是,逻辑运算符两边是不是同一个对象
 
  if($p1 === $p3){
 
  echo 'Y'; // $p1和$p3是同一个对象
 
  }else{
 
  echo 'N';
 
  }
 
  特殊的对象引用 $this :
 
  特殊对象的引用$this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问。
 
  构造方法和析构方法
 
  构造方法
 
  说明:
 
  构造方法, 构造器
 
  1. 是对象创建完成以后,“第一个” “自动调用”的方法
 
  2. 构造方法的定义, 方法名一个固定的,
 
  在PHP4中 和类名相同的方法就是构造方法
 
  在PHP5中 构造方法选择使用 魔术方法 __construct() 所有类中声明构造方法都使用这个名称
 
  优点: 在改变类名时,构造方法不用改变
 
  作用:就是为成员属性初使化;
 
  格式:
 
  格式: [修饰符] function __construct ( [参数] ) {
 
  ... ...
 
  }
 
  析构方法
 
  析构方法:
 
  1. 当对象被释放之前最后一个 “自动”调用的方法
 
  使用垃圾回收器(java PHP)而C++手动的释放
 
  作用:关闭一些资源, 作一些清理的工作
 
  __destruct();
 
  对象释放方法:
 
  unset($p)
 
  $p = null
 
  页面结束时释放
 
  实例:
 
  魔术方法:
 
  魔术方法:
 
  * 在类中写出了某个魔术方法, 这个方法对象的功能 就会添加上
 
  *
 
  * 方法名称都固定的(都是系统给我们提供好),没有自己定义的,
 
  *
 
  * 每一个魔术方法, 都是在不同时刻为了完成某一功能自动调用的方法
 
  * 不同的魔术方法有不同调用 时机
 
  *
 
  * 都是以 __开头的方法(两个下划线)
 
  *
 
  * __construct(); 构造方法
 
  * __destruct(); 析构方法
 
  *
 
  * __set(); 封装
 
  * __get();
 
  * __isset();
 
  * __unset();
 
  *
 
  * __clone();
 
  *
 
  * __call();
 
  *
 
  * __sleep();
 
  *
 
  * __weakup();
 
  *
 
  * __toString()
 
  *
 
  * ...
 
  *
 
  * __autoload();
 
  封装性
 
  封装性:面向对象的三大特性之一
 
  概念:就是把对象中的成员(属性、方法)结合成一个独立的相同单位,并尽可能隐藏对象的内部细节
 
  封装中用到的三个修饰词:public(公有的)、 protected(受保护的)、private(私有的)
 
  被这个三个词修饰的属性或方法的被访问范围
 
  public protected private
 
  外面 Y N N
 
  子类 Y Y N
 
  自己 Y Y Y
 
  说明:外面指的是父类或者子类的花括号外面统称为外面,子类指的是子类的花括号
 
  内部,自己指的就是父类本身的花括号内。
 
  //protected
 
  class A{
 
  protected $name = 'test';
 
  public function ziji(){
 
  return $this->name;
 
  }
 
  }
 
  class B extends A{
 
  public function getname(){
 
  return $this->name;
 
  }
 
  }
 
  $b = new B;
 
  echo $b->ziji();
 
  //protected 外面不能访问 子类里面可以访问 自己里面也可以访问
 
  //private
 
  class A{
 
  private $name = 'test';
 
  public function ziji(){
 
  return $this->name;
 
  }
 
  }
 
  class B extends A{
 
  public function getname(){
 
  return $this->name;
 
  }
 
  }
 
  $b = new B;
 
  echo $b->ziji();
 
  //private 外面访问不到 子类里面也访问不到 自己里面是可以的
 
  //public
 
  class A{
 
  public $name = 'test';
 
  public function ziji(){
 
  return $this->name;
 
  }
 
  }
 
  class B extends A{
 
  public function getname(){
 
  return $this->name;
 
  }
 
  }
 
  $b = new B;
 
  //echo $b->name;
 
  //echo $b->getname();
 
  $a = new A;
 
  echo $a->ziji();
 
  //public 外面可以访问 子类里面也可以访问 自己里面也可以
 
  为什么要封装?(封装的作用)
 
  属性封装:
 
  只要一个变量,需要在多个方法中使用,就将这个变量声明成成员属性,可以直接在这个对象中的所有方法中使用
 
  成员属性,就相当于这个对象中的全局变量
 
  成员属性都会在方法中使用,成员属性值的变化其实就是在改变方法的执行行为,也就是改变对象的功能。
 
  成员属性的不正常方法执行的功能也就不正常。
 
  构造方法会正常使用$p = new Person('vilin',19,'男');
 
  封装的作用:
 
  不需要在对象外部改变或读取属性值
 
  对需要读取或改变的值使用方法加以控制
 
  使用魔术方法__set() __get() 设置或读取值进行操作(使用自定义的方法调用属性太多的时候要声明很多方法,太复杂。)
 
  方法封装作用:
 
  一个类中有100个方法, 封装了95个(为另外的5个服务的方法), 只有5个方法可以使用
 
  供用户调用的功能方法只有5个就够了,封装起来,让用户知道私有的方法,不需要调用。
 
  和封装有关的魔术方法:
 
  __set():是直接设置私有成员属性值时,自动调用的方法
 
  __get():是直接获取私有成员属性值时,自动调用的方法
 
  __isset(); 是直接isset查看对象中私有属性是否存时自动调用这个方法
 
  __unset(); 是直接unset删除对象中私有属性时,自动调用的方法
 
  //用到的词 $this class function construct destruct private protected public
 
  实例:关于封装相关的魔术方法
 

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!