请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
- 按值传递:函数范围内对值的任何改变在函数外部都会被忽略
- 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
- 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。
js闭包,原型链是什么?
- 闭包是指有权访问另一个函数作用域中的变量的函数
- 派生对象使用proto指针保存对原型对象的链接,就形成了原型链。对象通过原型链相互连接。所有的对象都在原型链上。所有的原型链顶端都是Object对象。
php中for和foreach比较
- php推荐用foreach。
- for需要事先count(i,每次循环都要进行条件判断c,然后自增arr[$i]需要进行哈希操作.
- foreach循环数组时,指针会自动指向下一个元素,不需要计算数组长度,没有条件判断和自增变量,调用元素时也没有哈希操作
mysql与mysqli的区别
- mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。
- mysqli连接:一直都只使用同一个进程。
php7和PHP5对比的新特性和性能优化
- 抽象语法树(AST): AST在PHP编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些Hack代码,同时,让实现更容易理解和可维护
- Natice TLS:线程数据共享安全,开启一个全局线程用作数据共享内存空间
- 指定参数 返回值类型
- zval 结构的变化
- 异常处理
- 新的参数解析方式
- hashtable变化
防止SQL注入
- 打开php的安全模式同时关闭用户组安全:safe_mode=On------safe_mode_gid = off
- 控制php脚本能访问的目录,设置为自己的网站更目录:open_basedir = D:/usr/www
- 关闭危险函数:display_function=
- 关闭PHP版本信息在http头中的泄漏:expose_php = Off
- 关闭注册全局变量:register_globals = Off(默认关闭)
- MYSQL的降权运行
- 使用mysql_real_escape_string函数对参数过滤
预防XSS攻击
- 过滤从表单提交来的数据,使用php过滤函数htmlentities()中文一起转化,htmlspecialchars()不会转化中文默认情况下不处理单引号,最好加上第二个参数ENT_QUOTES
- 打开session.cookie_httponly
- 扩展remove_xss方法正则过滤
预防CSRF攻击
- 在php.ini中设置禁用allow_url_fopen和allow_url_include
- 生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它
PHP垃圾回收机制
PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。
双引号和单引号的区别
- 双引号解释变量,单引号不解释变量
- 双引号里插入单引号,其中单引号里如果有变量的话,变量解释
- 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
- 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\
- 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
获取MySQL InnoDB索引树的高度
SELECT
b.name, a.name, index_id, type, a.space, a.PAGE_NO
FROM
information_schema.INNODB_SYS_INDEXES a,
information_schema.INNODB_SYS_TABLES b
WHERE
a.table_id = b.table_id AND a.space <> 0;
isset、empty、is_null的区别
- isset 判断变量是否定义或者是否为空
- empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。
- is_null:检测传入的值(值、变量、表达式)是否为null
网友评论