php的基础语法[4]

定界符

定界符的作用就是按照原样,包括换行等特殊字符,存储在其内部的文本;
在定界符中的任何特殊字符都不需要转义,只有变量文本会被其值来替换。

语法格式为:

<<<php
要存放的文本
php;

其中,<<<为定界符标志,php类似引号,作为文本的开头和结尾,可自定义,但前后要保持大小写一致。

举几个例子:

$s = <<<php
123,
\n
	456
php;
echo $s;

这里输出

123,


	456

…,好吧,不是很懂这个定义,似乎该转义的还是会转义,只是看不见的符号会留着。

再来一个:

$x = 123;
$s = <<<php
\$x = $x
php;
echo $s;

这里输出:$x = 123

感觉定界符有点像双引号,双引号也可以多行,只是使用双引号时需要加个斜杆转义一下,
而且,定界符是不能用echo直接打印的,需要先转成变量,所以还是建议使用双引号。


类 / 对象

这里只提一些基本操作(如题)

类的定义

首先,声明一个类要用关键字 class,然后跟上类名,类名同样由大小写字母、整数和下划线构成,似乎不区分大小写,但使用的时候最好保持大小写一致
然后加上花括号,一个最简单的类就完成了:

class name {
}

但是调用的话,需要先声明成对象:

$obj = new name;

因为现在这个类里面什么也没有,所以暂时不调用。

一个类应该由属性和方法构成,属性即变量,方法即函数,这些都是在花括号里声明的。

声明类的变量和类外的普通变量有点不一样,也和函数内的变量不一样,

类中变量声明时要在最前面加上var这个关键词,可以不赋初始值。

访问类的属性和方法时,要在变量后面后面加个->

class name {
	var $a;
}
$obj = new name;
var_dump($obj->a);

没有赋初始值时,值会是null


定义类中的函数与定义普通函数相似,但不能直接访问该类函数,而是要先声明成对象后调用:

class name {
    var $var1;
    function fun1() {
        var_dump($this->var1);
    }
}
$obj = new name;
$obj->fun1();

还有一个要注意的地方,在类中函数使用类自身的变量时,需要使用$this->+变量名,这里的变量名不需要在头部加$


构造函数 / 析构函数

类中有两个特殊函数,分别是构造函数(__construct)和析构函数(__destruct)。

构造函数是在创建类为对象变量时触发的,这个函数有参数,可以是0个和无限个;
析构函数是在删除变量时触发的,它没有任何参数。
如果没有声明,php将生成无参、无内容的构造和析构函数。

首先来看构造函数, 算了,一起看吧:

class name {
    function __construct() {
        echo __CLASS__ . '被创建了' . PHP_EOL;
    }

    function __destruct() {
        echo __CLASS__ . '被销毁了' . PHP_EOL;
    }
}
$obj = new name;
unset($obj);

__CLASS__是另一个常量文本,他会被替换成当前所在类的名字。
删除变量可以用unset完成,也可以等脚本执行结束时自动删除。

这里的输出就是:

name被创建了
name被销毁了

访问控制

类是对象的抽象,对象是类的实例化结果,
如果要用现实中的事物表示对象,那大概就是每一个个体,不管是生物还是物品,
比如说人,一个人,他肯定有他自己想给人知道、不想给人知道,和传承给别人的,
类也是如此,而这就体现在访问控制的三个属性,publicprivateprotected上。

public,正如他的英文释义一样,是公开,即外面能直接访问调用的。
private,是只有类内部能使用的,protected是类内部以及继承后的类能使用的,
这两者的区别在于,设定成private的属性和方法不能被子类继承,只能类自身用。

使用这三个属性也很简单,就只要在变量和函数前面加关键词,麻烦的是每个变量和函数都要加关键词,如果不加关键词,那就会默认当做public,这点有体现在前面的例子中。

写例子的时候,发现变量的var和三个权限只能四选一

还是继续看例子把:

class name {
    public $var1;
    private $var2;
    protected $var3;

    public function fun1() {
        echo __FUNCTION__ . PHP_EOL;
    }

    private function fun2() {
        echo __FUNCTION__ . PHP_EOL;
    }

    protected function fun3() {
        echo __FUNCTION__ . PHP_EOL;
    }
}
$obj = new name;

下图为我用的一个IDE截图,从它的智能语法从也能看出,
只有访问权限设置为public的变量和函数可以在外部直接调用。
无描述
要想在外部访问或操作那些设置为privateprotected的变量和函数,则需要借助一个public的函数,在这个函数里再访问那些变量和函数,比如把fun1改成如下样子:

public function fun1() {
	$this->var2 = 2;
	$this->var3 = 33;
	echo $this->var2 . $this->var3;
}

那么var2会变成2var3会变成33,调用fun1时会输出233


继承

有时候,我们想新开个类,对另一个类做扩展,但又不想用他原有的一些东西,那么就要用到提到的protected这个访问权限。

拿前面写过的name类开下刀,我们想弄个完全不同的fun1,还想加个fun4,并且要调用原来的fun3,(为啥不调用fun2呢?因为private后的函数并不能在继承后的类使用),差点忘了,类名叫name2

// 首先,我们需要使用个新关键词`extends`
class name2 extends name {
    public function fun1() {
        // emm,忘记现在只能用var3了
        // 那就魔改下
        $this->var1 += 1;
        $this->var3 += 9;
        // 这个函数没啥用意,只是为了体现出与name中的fun1有所不同
        return $this->var1 + $this->var3;
    }

    public function fun4() {
        $this->fun3();
    }
}
// 调用的话和普通类没差别
$obj2 = new name2;
echo $obj2->fun1() . PHP_EOL;
echo $obj2->var1 . PHP_EOL;
$obj2->fun4();

然后会发现调用fun1时不会像name类里的fun1输出233,而是一个数字,
var1也变成了1,调用fun4时会输出fun3的名字。



目前就暂时写到这里吧,后续文章可能不这么写了,

因为,一个学了还用了几年世界上最好的语言 的PHPer,
从头写一遍算的上一般详细的 教程文章,
还要组织语言,真的太浪费时间,
而且,让我快变成仅仅是为了写博客而学习的,无自身驱动力的学习者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值