【PHP 编程能力提升系列】 日常工作常见问题总结

一、引言

   记录并总结日常遇到的问题,做到深入思考,避免再次入坑;

  本篇是记录了日常工作中遇到的一些问题,类似于流水账形式;如果感觉有点乱,多包容哈

二、详情

1、5.3.0 + 以上的版本才支持命名空间;5.3.0 + 版本去除了safe_mode的选项,默认是关闭状态

2、类是其基类(包括抽象类)和接口的实例,也就是instanceof 为true;

3、stdClass是所有类的基类

4、echo print 都可以用来输出字符串;printf可以按照一定格式输出数据;sprintf可以按照一定格式返回字符串(%s %d);print_r可以打印任何数据,和var_dump很类似;

5、对于一个字符串,可以使用str_split进行分割为数组,也可以直接将字符串按索引取数据,如$str[1];通过strlen获取到字符串的长度之后就可以进行字符串的遍历操作了。

6、对象的复制是引用类型的复制,除此之外的其他数据类型的复制都是值复制,一个变量的改变并不会引起另外一个变量的改变。

7、对于对象类型的参数传递是引用传递(方法里修改了形参的值会影响到实参),其他类型的参数传递都是值传递;

8、常量定义的简写:

defined(NAME) or define(NAME, 'lily');
//注意:
//对于在类或者接口中定义的常量则一定要通过类或者接口访问才可

9、PHP5引入了类型提示的概念,在函数定义时,可以强制定义某个参数为对象或者数组,但对于标量数据类型不起作用,如下面的函数定义:

function show (string $arr) {   //会将前面的string当作类名
	var_dump($arr);
}

show('lily');

会报如下的错误:

9、list只可用于索引数组而不能用于关联数组

list($name, $sex, $age) = array('lily', 1, 30);

10、range函数用于创建范围数组,不仅可以用于数字,还可用于字符数组的创建,如下所示:

range('a', 'd');
range(1, 10, 3); //第三个参数用于设置跨度 

11、array_pop、array_push、array_shift、array_unshift操作数组之后,对于索引数组而言,都会重新组织一下

数据。

12、parse_url可以解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。可以通过指定第二个参数来获取指定的内容,第二个参数有PHP_URL_SCHEMEPHP_URL_HOSTPHP_URL_PORTPHP_URL_USERPHP_URL_PASSPHP_URL_PATHPHP_URL_QUERYPHP_URL_FRAGMENT

$_SERVER全局变量里的有些内容与这个会有所重叠。

13、strstr可以通过设置第三个参数返回前一部分字符串。(5.3+版本才支持)

 $url = 'http://username:password@hostname/controller/action?arg=value#anchor';
 echo strstr($url, 'hostname');
 //输出为hostname/controller/action?arg=value#anchor,包含hostname字符串
 echo strstr($url, 'hostname',true);
 //输出为http://username:password@,不包含hostname

14、http_build_query用于生成 URL-encode 之后的请求字符串,常常用于数组,但也可以用于对象;

 $data = array(
 		    'foo'=>'bar',
 		    'baz'=>'boom',
 		    'cow'=>'milk',
 		    'php'=>'hypertext processor'
         );
 
 echo http_build_query($data) . "\n";
 
 //输出为foo=bar&baz=boom&cow=milk&php=hypertext+processor

15、PHP支持四种属性作用域:public private protected static;方法支持六种作用域:public private protected final static abstract;

16、memory_limit 设置内存;max_execution_time设置脚本的最大执行时长;

17、PHP7 之前对于普通的方法也可以通过类来调用,不过会报strict 错误;在PHP7 之后,只有静态方式才允许通过类来调用,否则会报fatal错误;

18、子类可以覆盖父类中定义的属性和方法,设置可以修改访问修饰符

19、final的类不可被继承;final的方法不允许被覆盖;不允许定义final属性

20、子类不会显示的调用父类的构造函数,只会在子类不存在构造函数或者在子类中使用parent::__construct()方法时才会调用父类的构造函数;

21、对于在类或者接口中生命的常量,则只能通过接口或者类来调用,而通过define生命的常量可以直接调用

22、因为静态属性、静态方法不属于某个对象,它是与类有关的,所以只能通过类来调用,而且静态方法中没有上下文环境,方法里面不能使用$this调用变量,只能使用类(类名/self)来引用静态属性;其他属性和方法则是与具体的对象有关的,所以需要通过对象来调用;

23、PHP不支持方法重载、操作符重载、多重继承

24、接口中除了可以定义一些方法外,还可以定义常量;但是这个常量只可以通过接口来访问

25、接口可以多继承,而类只可以单继承

26、PHP的错误级别可以在配置文件中通过error_reporting设置,在开发环境下,开启display_errors并将错误级别设置为E_ALL&E_STRICT;其中E_STRICT会显示一些版本兼容的提示信息。

27、对于程序中有可能产生异常的地方一定要记得try catch处理,或者设置一个全局异常捕捉处理函数:set_exception_handler();推荐采用第二种,这样在程序中就不用过多的考虑异常的问题;一定要保证程序的健壮性;

28、与目录、文件相关的常见系统函数有basename、dirname、pathinfo、realpath;其中basename用来返回目录的文件以及后缀部分;dirname用于返回路径的目录部分;pathinfo函数会返回一个数组,包含目录、文件名、后缀等部分;realpath用来返回去除符号链接相对路径之后得到的绝对路径;

$path = '/home/work/orp/webroot/baidu/mapx/index.php';
var_dump(pathinfo($path));
//输出为array(4) { ["dirname"]=> string(33) "/home/work/orp/webroot/baidu/mapx" ["basename"]=> string(9) "index.php" 
//["extension"]=> string(3) "php" ["filename"]=> string(5) "index" }
echo basename($path,'.php');
//输出为index
echo basename($path);
//输出为index.php
echo dirname($path);
//输出为/home/work/orp/webroot/baidu/mapx/
echo realpath('/home/work/orp/../../mapx/index.php');
//输出为/home/mapx/index.php

29、parse_url可以对URL进行解析,同样parse_str可以对字符串进行解析。其中parse_url的返回结果是一个数组,而parse_str的解析结果需要放到第二个参数中,类型为数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值