您的位置:首页 > 编程语言 > PHP开发

类的声明和语法

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息