类的声明和语法

1.达标和检测

学习PHP的面向对象,你需要具备PHP面向过程的相关基础,如不会,请先学习PHP基础部分.

面向对象一种编程思想,已经几十年了,而PHP这门语言到4.0版本的时候才有了面向对象,所以对于没有任何计算机语言的童鞋来讲,可能瞬间掌握,难度比较大,需要体会和实践,慢慢领悟,为了防止陷入思想的无底洞,先不要管为什么这么写,前期我们需要做的,就是熟悉并熟练操作PHP面向对象的基本语法和用法,随着代码量的增多,理解自然会深化,前期一定要做到如下几点:

  1. 类声明语法 试声明student类,有score属性和study方法
  2. 权限封装 知道public、 protected、 private各自的可见范围
  3. 继承 写A类,再写B类继承自A类,且要重写A类中的某个方法
  4. 静态属性与静态方法, 知道static静态方法需要用类名::方法名()调用
  5. 魔术方法 了解常用魔术方法分别在什么时间被调用
  6. 写一个抽象类,并用2个子类分别继承实现 分析这2个子类有什么共同特点?
  7. 写一个接口,并用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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值