类的声明和语法
2017-01-07 15:07
218 查看
1.达标和检测
学习PHP的面向对象,你需要具备PHP面向过程的相关基础,如不会,请先学习PHP基础部分.面向对象一种编程思想,已经几十年了,而PHP这门语言到4.0版本的时候才有了面向对象,所以对于没有任何计算机语言的童鞋来讲,可能瞬间掌握,难度比较大,需要体会和实践,慢慢领悟,为了防止陷入思想的无底洞,先不要管为什么这么写,前期我们需要做的,就是熟悉并熟练操作PHP面向对象的基本语法和用法,随着代码量的增多,理解自然会深化,前期一定要做到如下几点:
类声明语法 试声明student类,有score属性和study方法
权限封装 知道public、 protected、 private各自的可见范围
继承 写A类,再写B类继承自A类,且要重写A类中的某个方法
静态属性与静态方法, 知道static静态方法需要用类名::方法名()调用
魔术方法 了解常用魔术方法分别在什么时间被调用
写一个抽象类,并用2个子类分别继承实现 分析这2个子类有什么共同特点?
写一个接口,并用2个类分别继承实现 分析这2个类有什么共同点?
能做出这7题,面向对象就能通过并入门了.
2.第一个类
原来我们在学PHP基础的时候,函数是这样写的.//函数的声明 function fly(){ echo "爱需要理由吗?"; } //函数的调用 fly();
如何改成类?
class 类名{ } //class是固定写法,后面加类名(类名使用大驼峰命名法),紧跟着直接写大括号,然后把函数直接复制进去就偶了.
class Ai{ function fly(){ echo "爱一个人需要理由吗?"; } }
但是我们怎么样调用呢?如果你直接用函数调用的方法( fly(); )去调用,会直接报错.说找不到函数
说明:类是需要先new后,再调用的,也叫实例化.想一下,什么叫实例化?但从字面意思理解,实例就是现实的例子.翻译成成中文就是,现实的例子化.
也就是说,我想调用fly()这个类中的”函数”,需要new Ai();
翻译的通俗像人话一点:就是新建一个现实的例子.
这个时候它会有一个返回值,这个返回值就是大名鼎鼎的”对象”.
完整代码如下:
class Ai{ function fly(){ echo "爱一个人需要理由吗?"; } }
//实例化一个Ai类,返回值是一个对象,储存在$aiai变量里
$ai = new Ai();
3.类的属性和方法
更加通俗一点讲什么是类?这就需要大家去思考现实的东西了.比如说,我们人类,也是一大类,猪类,狗类,自行车类….发现这些都是一大类,并且有共同的特征,有共同的一些东西.比如:我们人类,你有没有姓名,年龄,性别,身高,体重等等?这些都是我们人类生下来就固有的属性,这在面向对象的思想中叫类的属性.
比如,一个正常人,会不会哭,笑,跑,走,生气这些动作?这在面向对象思想中叫类的方法.
类:说白了就是一整个大类,跟现实中的类一样,通过属性(php面向过程中的变量/名词)和方法(php面向过程中的函数/动作),模拟人或者物的共同特点.
//这是php面向过程的变量声明 $name = '老王'; class{ function fly(){ echo '爱一个人需要理由吗?'; } } //实例化一个Ai类,返回值是一个对象,储存在$aiai变量里 $ai = new Ai();
放在里面就成了属性
class{ //类的属性(也可以叫变量) $name = '老王'; //类的方法(也可以叫函数) function fly(){ echo '爱一个人需要理由吗?'; } } //实例化一个Ai类,返回值是一个对象,储存在$aiai变量里 $ai = new Ai();
怎么样调用?
class{ $name = '老王'; function fly(){ echo '爱一个人需要理由吗?'; } } //实例化一个Ai类,返回值是一个对象,储存在$aiai变量里 $ai = new Ai(); $ai->name; $ai->fly();
发现还是报错,是因为类有权限控制,需要写public,现在可能还不理解权限控制.我们后期的教程中会涉及.先照写就好
class{ public $name = '老王'; function fly(){ echo '爱一个人需要理由吗?'; } } //实例化一个Ai类,返回值是一个对象,储存在$aiai变量里 $ai = new Ai(); $ai->name; $ai->fly();
说明:php5以后,方法默认不用加public也可以调用和执行,因为默认就是public,但之前的版本必须要加public才可以,要不会报语法错误
4.类的语法
我们看一下类的语法注意点//类名,不区分大小写 习惯上市大驼峰 class Stu{ //属性名 调用时不加$ public $sn = '00001'; public $name = 'lisi'; //方法名 function ks(){ echo '我叫lisi,我来学PHP'; } } //类名,不区分大写小,但是我们的编程过程中,要人为的区分 $stu = new stu(); echo $stu->sn,'<br />'; //调用属性.注意:此处一定不能加$符号 $stu->ks();//调用方法
5.类中属性不能是表达式?
php5.6之前,类名只能是直接传值或者常量,而不能是表达式的结果函数调用,运算等等
PHP5.6以后允许使用包含数组,字符串字面值和常量的标量表达式(数学运算,比较运算等)
高中数学知识:标量和矢量…..(回忆:标量有大小,无方向,标量无方向)
class Stu{ //public $num = rand(10,100);//报错 //public $num = 1+2; //没问题,5.6之前不行 //public $num = array('a','b'=>array('1')); public $num = 1||0; } $stu = new Stu(); echo $stu->num;
相关文章推荐
- vs提示大量未声明标识符,语法错误缺少:“;”
- iPhone开发基础语法(1)-----声明property的语法
- Go与C声明语法比较
- 理解C/C++语言的声明语法-声明子
- 水滴石穿C语言之声明的语法
- 【搬家】【数据库】【语法】SQL 中声明变量使用默认初值存在的隐患
- 用[Bindable]标签声明和用{}语法绑定属性
- xml--语法01--文档声明(乱码处理)
- Esper事件处理引擎_17_EPL 语法_9_Schema 声明数据类型
- CodeSmith 使用教程(6): 基本语法-声明和使用属性
- [C专家]分析C语言声明——只有编译器才会喜欢的语法
- declare handler 声明异常处理的语法
- 1. 声明的语法
- 理解C的声明语法
- 理解C/C++语言的声明语法-声明子
- C语言之声明的语法
- 水滴石穿C语言之声明的语法
- jsp程序设计(二)-jsp基本语法(2)-声明
- IOS学习 Block语法的使用:声明、创建、引用局部变量
- 巧用宏命令,改造BCB——在BCB中实现类C#属性声明语法