php面向对象视频笔记之第一章(面向对象基础)

面向对象编程(Object Oriented Programming)OOP,达到了软件工程的三个目标:重用性、灵活
性和扩展性。

php为啥要用OOP?

php不是一个真正的面向对象的语言。php是一个混合型语言,你可以使用OOP,也可以使用传统
的过程化编程。但是遇到大型项目时,代码量越大,维护成本越大,而且越难,修改一个功能可
能要涉及成千上万行代码。
面向对象编程的优势:
1)面向对象符合人类看待事物的一般规律;
2)采用面向对象方法可以使系统各部分各司其职、各尽所能;
3)面向对象编程的代码更简洁、更易于维护,并且具有更强的可重用性;

类和对象的关系

类(class)是对一类事物的描述,是抽象的、概念上的定义。是具有某些相同属性和功能行为的一
些对象的集合。
对象是系统中用来描述客观事物的一个实体/实例(instance)。
类与对象的关系就如模具和铸件的关系,设计图与成品的关系。
类的实例化结果就是对象,而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同

行为(方法)的对象。    

类的声明和对象的创建

class 类名{ //一般首字母大写,驼峰式命名。
  属性、方法(函数);
}
创建对象: $对象变量 = new 类名称();

类的属性和方法

1)属性(类的成员变量)指在类中的共同属性,它是静态的,可以被方法操作。
2)属性在声明时,必须使用public/private/protected之一修饰以定义变量的访问权限。
注意点:在属性定义可不设初值,或赋予特定初值,如:Boolean/integer/float/string/array/NULL。
不能是表达式、函数、对象、资源类型。
3)方法(类的成员函数)指类中一些功能行为,是动态的,可执行的。通过在类定义中声明函数,即创建
了类的方法。
注意点:方法的声明定义和属性不同,并不是必须使用public/private/protected之一修饰。缺省情况下默认
public即公有修饰符修饰。
通过引用变量(对象)访问
1)首先实例化一个对象 $cat = new Cat();然后使用特殊操作符“->”来完成对象成员属性和
成员方法的访问。
2)访问属性:对象->属性 [$cat->name;]
3)修改属性:对象->属性 = 新值 [$cat->name = 'newVal';]
4)访问方法:对象->方法 [$cat->run();]
类内部访问
1)内部访问需借助关键词 $this 来指代本类对象。
2)访问属性:$this->属性 [$this->name;]
3)修改属性:$this->属性 = 新值 [$this->name = 'newVal';]
4)访问方法:$this->方法 [$this->run();]

对象的比较

1)使用比较操作符(==)
1-1:对象以一种很简单的规则比较:当两个对象有相同属性和值,属于同个类且被定义在
相同的命名空间中,则两个对象相等。等于符合比较对象时比较对象是否有相同的属性和值。
1-2:注意 == 比较两个不同对象时,可能相等也可能不等。
2)使用全等符(===)
当且仅当两个对象引用指向相同类(在某一特定的命名空间中)的同个对象时才相等(是否有相同内存地址)。

1.php文件:

<?php
  class Person {
     public $name = 'lisi';
  }
  $p1 = new Person();
  $p2 = new Person();
  
  echo 'p1对象:'; print_r($p1);
  echo '<br />p2对象:'; print_r($p2);
  echo '<br />';
  var_dump($p1 == $p2); //相同属性和值,相同命名空间 true
  echo '<br />';
  var_dump($p1 === $p2); //false,=>内存地址不同
  
  $p2->name = 'wangwu';
  echo '<br />p1对象:';  print_r($p1);
  echo '<br />p2对象:';  print_r($p2);
  echo '<br />';
  var_dump($p1 == $p2); //false

  $p3 = $p1; //让 $p3指向了$p1所在内存地址
  $p3->name = 'wangwu';
  echo '<br />';
  print_r($p3);
  echo '<br />';
  print_r($p1);
  echo '<br />';
  var_dump($p3 == $p1); //true(相同属性和值,相同命名空间)
  echo '<br />';
  var_dump($p3 === $p1);//true(相同属性和值,相同命名空间和内存地址)
  
?>

结果如下图所示:


2.php文件:

<?php
  namespace T {
     class Person{
	   public $name = 'lisi';
	 }
  }

  namespace T1 {
     class Person{
	   public $name = 'lisi';
	 }
  }

?>
3.php文件:

<?php
 include __DIR__.'/2.php';//当前目录下的

 $p1 = new \T\Person();
 $p2 = new \T1\Person();

 echo 'p1对象:'; print_r($p1);
 echo '<br />p2对象:'; print_r($p2);
 var_dump($p1 == $p2); //相同属性和值,同命名空间 true
?>
结果如下

php构造方法的定义、特性、声明

1、定义:又称构造函数,是对象被创建时自动调用的方法,用来完成类初始化的工作。
2、特性:
2-1:构造方法和其它函数一样,可以传递参数,可以设定参数默认值;
2-2:构造方法可以调用属性,也可以调用方法;
2-3:构造方法可以被其它方法显式调用。(可由对象直接调用)
3、声明
3-1:在php5中规定构造方法使用__construct()函数表示构造方法,注意是2个_(下划线)。
3-2:在php4中使用与类名同名的方法为构造方法。在php5中依然支持这种方式,但不建议再使用这种方式。

php中析构函数与垃圾回收机制

1、析构函数:当某个对象的所有引用都被删除(成为垃圾)或者当对象被显式销毁时执行的函数,也就是
对象在内存中被销毁前调用析构函数。
2、特性:
2-1:与构造函数相对的就是析构函数,析构函数是php5新增的内容,在php4中无析构函数;
2-2:析构函数是由系统自动调用的,虽然析构函数也可以被显式调用,但强烈建议不要使用;
2-3:声明析构函数与构造函数类似,一个类的析构函数名称必须是__destruct(),并且不能带参数。
3、php的垃圾回收机制
php的GC:
3-1:在php中,没有任何变量指向这个对象时,这个对象就成为垃圾。php会将其在内存中销毁,这就是php的
GC(Garbage Collector)垃圾处理机制,目的是防止内存溢出。
3-2:php中变量在内存中是存在于一个zval的变量容器中。结构如下:


面向对象与面向过程编程实例对比

略。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值