echo $car->getName(); //调用对象的方法 输出对象的名字
42.
class Car { public function getName() { return '汽车'; } } $car = new Car(); echo $car->getName();
使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。
class Car { public static function getName() { return '汽车'; } } echo Car::getName(); //结果为“汽车”
43.
静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用。静态属性不允许对象使用->操作符调用。
静态方法也可以通过变量来进行动态调用
$func = 'getSpeed'; $className = 'Car'; echo $className::$func(); //动态调用静态方法类和类中的方法都可以通过变量来动态调用
静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。
44,。
类属性必须定义为公有、受保护、私有之一。为兼容PHP5以前的版本,如果采用 var 定义,则被视为公有。
如果构造函数定义成了私有方法,则不允许直接实例化对象了,这时候一般通过静态方法进行实例化,在设计模式中会经常使用这样的方法来控制对象的创建,比如单例模式只允许有一个全局唯一的对象。
class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 } return self::$_object; } } //$car = new Car(); //这里不允许直接实例化对象 $car = Car::getInstance(); //通过静态方法来获得一个实例44.
PHP中的重载指的是动态的创建属性与方法
(1)属性重载:对不存在的属性赋值,直接动态创建(这个动态创建是只能被实例对象使用一次吗,还是可以一次保留在类里?)
(2)方法重载
方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
class Car { public $speed = 0; public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } } } $car = new Car(); $car->speedUp(); //调用不存在的方法会使用重载 echo $car->speed;可以在_call方法里面实现你想实现的不存在方法的内容
45.
(1)对象比较
当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。
(2)对象复制
$a = new Car(); $a->name = 'new car'; $b = clone $a; var_dump($b);(3)对象序列化
可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
$a = new Car(); $str = serialize($a); //对象序列化成字符串 echo $str.'<br>'; $b = unserialize($str); //反序列化为对象 var_dump($b);
46.
单引号和双引号到底有啥区别呢?
PHP允许我们在双引号串中直接包含字串变量。
而单引号串中的内容总被认为是普通字符。
比如:
$str='hello'; echo "str is $str"; //运行结果: str is hello echo 'str is $str'; //运行结果: str is $str
47.
trim去除一个字符串两端空格。
rtrim是去除一个字符串右部空格,其中的r是right的缩写。
ltrim是去除一个字符串左部空格,其中的l是left的缩写。
48.
$len = strlen($str);获取含中文的字符串长度(获取长度包括其中的英文字符)
$str = "我爱你"; echo mb_strlen($str,"UTF8");//结果:3,此处的UTF849.
$str='i love you'; //截取love这几个字母 echo substr($str, 2, 4);2、中文字符串的截取函数mb_substr()
$str='我爱你,中国'; //截取中国两个字 echo mb_substr($str, 4, 2, 'utf8');//50.
函数说明:strpos(要处理的字符串, 要定位的字符串, 定位的起始位置[可选])
$str = 'I want to study at imooc'; $pos = strpos($str, 'imooc'); echo $pos;//结果显示19,表示从位置0开始,imooc在第19个位置开始出现51.
函数说明:str_replace(要查找的字符串, 要替换的字符串, 被搜索的字符串, 替换进行计数[可选])
$str = 'I want to learn js'; $replace = str_replace('js', 'php', $str); echo $replace;//结果显示I want to learn php52.
1、php字符串合并函数implode()
函数说明:implode(分隔符[可选], 数组)
返回值:把数组元素组合为一个字符串
例子:
$arr = array('Hello', 'World!'); $result = implode('', $arr); print_r($result);//结果显示Hello World!
2、php字符串分隔函数explode()
函数说明:explode(分隔符[可选], 字符串)
返回值:函数返回由字符串组成的数组
例子:
$str = 'apple,banana'; $result = explode(',', $str); print_r($result);//结果显示array('apple','banana')
53.
正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式。
$p = '/apple/'; $str = "apple banna"; if (preg_match($p, $str)) { echo 'matched'; }
其中字符串'/apple/'就是一个正则表达式,他用来匹配源字符串中是否存在apple字符串。
54.
经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)
55.
$time=time();
//date函数,第二个参数取默认值的情况 echo date("Y-m-d"); //取得当前时间 //date函数,第二个参数有值的情况 echo date("Y-m
56.
//创建可抛出一个异常的函数 function checkNum($number){ if($number>1){ throw new Exception("异常提示-数字必须小于等于1"); } return true; } //在 "try" 代码块中触发异常 try{ checkNum(2); //如果异常被抛出,那么下面一行代码将不会被输出 echo '如果能看到这个提示,说明你的数字小于等于1'; }catch(Exception $e){ //捕获异常 echo '捕获异常: ' .$e->getMessage(); }getMessage()是Exception里面输入的文字.
其中常用的方法有:
getTrace 获取异常追踪信息
getTraceAsString 获取异常追踪信息的字符串
getMessage 获取出错信息
57.
'<br>'为PHP内的换行
58.