面向对象概念
Posted zhony
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象概念相关的知识,希望对你有一定的参考价值。
面向对象编程(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就代指这个对象。
以上是关于面向对象概念的主要内容,如果未能解决你的问题,请参考以下文章