共计 1175 个字符,预计需要花费 3 分钟才能阅读完成。
类的静态调用和实例化调用各自的利弊
静态方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用!
静态方法效率上要比实例化高,静态方法的缺点是不自动销毁,而实例化的则可以做销毁。
一些防范 SQL 注入、XSS 攻击、CSRF 攻击的方法
SQL 注入:– addslashes() 函数 ( 将’转为’,将”转为”) – mysqli_real_escape_string() 函数 – PDO::quote()
XSS:– htmlspecialchars 函数
CSRF:– 验证 HTTP REFER – 使用 toke 进行验证
echo、print、print_r、var_dump 区别
echo
输出单个或多个字符,多个使用逗号分隔
无返回值
echo "String 1", "String 2";
只可以输出单个字符
有返回值,因此可用于表达式
print "Hello";if ($expr && print "foo") {}
print_r
输出关于变量的易于理解的信息
支持多种数据类型,包括字符、数组、对象,格式化成易读格式
在调试时非常有用
若设置第二个参数,可将输出值返回 (而不直接输出)
$b = [
'm' => 'monkey',
'foo' => 'bar',
'x' => ['x', 'y', 'z'],
];
$results = print_r($b, true); //$results 包含了 print_r 的输出
var_dump
输出关于变量的易于理解的信息,多个可用分号分隔
支持多种数据类型,包括字符、数组、对象,格式化成易读格式 •输出格式与 print_r 不同,var_dump 的输出包含数据类型
在调试时非常有用
无返回值 注意
即使 print 可用于表达式,但这种用法,常常不利于代码可读性,与其他操作符混用容易让人误解
echo 和 print 都是语言结构,print_r 和 var_dump 是普通函数。echo 或 print 使用时,不需要使用括号将变量括起来
单引号和双引号的区别
双引号可以被分析器解析,单引号则不行
isset 和 empty 的区别
isset:检测变量是否已设置并且非 NULL empty:判断变量是否为空,变量为 0/false 也会被认为是空;变量不存在,不会产生警告
static、self、$this 的区别
static
static 可以用于静态或非静态方法中,也可以访问类的静态属性、静态方法、常量和非静态方法,但不能访问非静态属性
self
self 可以用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制
this
this 指向的就是哪个对象。但 $this 不能访问类的静态属性和常量,且 $this 不能存在于静态方法中