zhony

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。

面向对象是一种编程思想,它是对现实世界的一种抽象描述。

什么是对象?
万事万物都是对象,客观存在的任何一个实体都是对象,区分于我们口语中理解的”对象“。
比如说一个桌子对象,一个椅子对象,一个床对象,一个碗对象。

什么是面向过程编程?
我们之前所说的都是面向过程编程,就是特别强调过程化,所有的代码都要按照正常的编码逻辑一步
一步写,直到实现最后的想要的结果。

什么是面向对象编程?
面向对象编程就是所有的处理均模块化,通过调⽤已经实现好的功能实现编程。
通过一组图来了解一下什么是面向过程和面向对象。
过程化编程:

面向对象编程:

图解现实生活中一些模块化的商品。
模块化的手机

 

 

电脑本身就是模块化

 

什么是类?
现实生活中,什么叫“人类”?
所谓类,就是对相同或者相似对象的抽象描述。

类和对象什么关系?
先有类,然后通过这⼀类,得到对象。
比如上面的举例的床对象,既然床是一个对象,那这世界上所有的床就是一类了,我们可以称为
床类,这个世界上有各式各样的床,一说床,每个人想到的肯定是不同样式的床,此时这个床类仅仅
存在于我们的想象中,那我们怎么得到一个具体的床?也就是具体的一个床的对象?而不是仅仅存在
于我们的相像中。
类,仅仅是抽象描述,也就是概念性的东西,并没有实际的实体,只有通过类,形成我们想要的具体
的对象,才能使用,现实世界就是如此

写一个类

函数的写法:

1 //函数定义
2 function fly(){
3   echo \'带我装X带我非\';
4 }//函数调用
5 fly();

如何改成类?

 1 //类的定义
 2 class fei{
 3   function fly(){
 4   echo \'带我装X带我非\';
 5   } 
 6 }//调用报错
 7 fly();
 8 //正确调用,类需要new才能被调
 9 $ff = new fei();
10 //打印发现返回一个对象
11 var_dump($ff);

类的属性和方法

属性(变量):姓名,年龄,性别,身体
方法(函数):哭,笑,走,跑,生气
类:以人类为例,通过属性(变量)和方法(函数),模拟人的的共同特点,如何让一个人类顺利诞
生?需要new,得到一个具体的人类对象。
类:说白了就是整个一个大类,通过属性(变量/名词)和方法(函数/动作),模拟人或者物(对象)的共同特点

1 //这是原来的变量声明
2 $name = \'蛋蛋\';
3 class fei{
4   //方法
5   function fly(){
6   echo \'带我装X带我非\';
7   } 
8 }//叫实例化一个类。
9 $ff = new fei();

放在里面就成了属性,如何调用

 1 class fei{
 2   //属性,也叫变量
 3   $name = \'蛋蛋\';
 4   //方法,也叫函数
 5   function fly(){
 6   echo \'带我装X带我非\';
 7   } 
 8 }$ff = new fei();
 9 $ff->fly();
10 //报错,类有固定的语法,需要加一个关键词
11 $ff->name;
1 class fei{
2   //属性(公共的)
3   public $name = \'蛋蛋\';
4   //语法,public意思为公共的
5   public function fly(){
6   echo \'带我装X带我非\';
7   }}$ff = new fei();
8 $ff->name;
9 $ff->fly();

说明:PHP5以后,方法前面默认不加public也可以调用和执行,默认就是public,之前的版本必须要
加public

类的语法

//类名,不区分大小写,习惯上是大驼峰
class Stu{
  //属性名,调用时不加$
  public $sn = \'00001\';
  public $name = \'lisi\';
  //方法名
  function ks(){
  echo \'我叫lisi,我来做php\';
  

类的定义方式

定义一个小鸡类:

 1   <?php
 2     //定义一个小鸡类 
 3     class Chick{
 4    //成员属性
 5     //就是写在类里面的变量 只不过前面多了一个public
 6    public $color;//颜色
 7    public $jiguan;//鸡冠
 8    public $legs; //有几个腿
 9    public $mao; //有鸡毛
10    public $sex ; //性别
11    //类的定义不能出现过程化代码
12    //echo \'我发现你们的小鸡有点不正经\';
13   //成员方法
14   //就是写在类里面的函数 只不过前面多了一个public
15   //吃
16   public function eat(){
17   echo \'吃虫子吃沙子.....\';
18   }//
19  public function say(){
20   echo \'咯咯哒咯咯哒咯咯哒。。\';
21   }//下蛋
22   public function egg(){
23   echo \'嘎嘎嘎.....\';
24  

 成员访问

 1 <?php
 2   //定义一个小鸭类
 3   
 4   class Duck{
 5   public $name;
 6   public $sex;
 7   public $age;
 8   public function say(){
 9   echo \'嚯嚯嚯\';
10   } } //实例化得到对象
11   $tly = new Duck;
12   var_dump($tly);
13 //给成员属性赋值
14  //访问成员属性的时候属性名前面不能加$
15  $tly->name=\'唐老鸭\';
16  //赋值性别
17  $tly->sex =\'公\';
18  //赋值年龄
19  $tly->age = 18;
20  // $name = \'sex\';
21  // $tly->$name = \'李花\';
22  // $tly->sex = \'丁美\';
23  //var_dump($tly);
24  //取值
25   echo \'名字:\'.$tly->name.\'<br/>\';
26   echo \'性别:\'.$tly->sex.\'<br/>\';
27   echo \'年龄:\'.$tly->age.\'<br/>\';
28   //使用成员方法
29   $tly->say();

属性的规则

属性规则:
a. 成员属性可以有默认值,也可以没有
b. 默认值不能是变量 public $name=$ab; public $name=$ab;
c. 默认值不能是函数 public ab(); public ab();
d. 默认值可以是常量 public PI; public PI;
e. 默认值可以有运算 public $a = 1+2; public $a = 1+2;
f. 值可以是任意类型

define(\'NUM\',20);
class Person{
  public $name = "狗蛋";
  public $name2;
  
  //默认值不能是变量
  //public $age=$num;
  
  //默认值可以运算
  //public $age = (18+2);
  
  //默认值不能是函数
  //public $age = max(19,5);
  
  //默认值可以是已经定义好的常量
  public $age = NUM;
  
 //常规默认值
 public $sex = 5.5;
 public $a = 5;
 public $d = true;
 public $c = null;
 public $s = array(1,2,3);

 //类的方法就是函数,可以传值。
 public function say($num=10){
 echo $num;
 echo \'我今年\'.$num.\'岁\'return $num;
 
 }
 
}
$ren = new Person();
var_dump($ren);
//学员练习调用可用和不可用的属性
$ren->a;

this是谁

先看一段代码:

1 //定义一个叫ren的类
2 class Ren{
3   public $name = \'蛋蛋\';
4   public function gao(){
5   echo $name.\'搞PHP\';
6   }}//实例化这个类,得到对象$ren
7 $ren = new Ren();
8 //报错,在类中使用本类的属性不可直接写
9 $ren->gao();

发现报错了,在类中使用本类的属性不可直接写,而是用 $this 伪变量

 1 //定义一个叫ren的类
 2 class Ren{
 3   public $name = \'蛋蛋\';
 4   public function gao(){
 5   //伪变量(俗称假变量,替代品)
 6   echo $this->name.\'搞PHP\';
 7     }}//实例化这个类,得到对象$ren
 8 $ren = new Ren();
 9 //可以正常调用
10 $ren->gao();

那这个this到底谁在用?this英文单词是这个的意思,在对象中,this指的是这个对象。

 1 //定义一个叫ren的类
 2 class Ren{
 3   public $name = \'蛋蛋\';
 4   public function gao(){
 5   //伪变量(俗称假变量,替代品)
 6   echo $this->name.\'搞PHP\';
 7   }}//实例化这个类,得到对象$ren
 8 $ren = new Ren();
 9 //可以正常调用
10 $ren->gao();
11 //再次实例化一个对象,得到ren2对象
12 $ren2 = new Ren();
13 //属性可以利用对象重新赋值
14 $rne2->name = \'B哥\'15 echo $ren2->gao();

记住,谁实例化this就代指这个对象。

 

分类:

技术点:

相关文章: