美文网首页
PHP开发经验总结

PHP开发经验总结

作者: LinkChen92 | 来源:发表于2019-03-05 18:18 被阅读0次

    请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?

    1. 按值传递:函数范围内对值的任何改变在函数外部都会被忽略
    2. 按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
    3. 优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

    js闭包,原型链是什么?

    1. 闭包是指有权访问另一个函数作用域中的变量的函数
    2. 派生对象使用proto指针保存对原型对象的链接,就形成了原型链。对象通过原型链相互连接。所有的对象都在原型链上。所有的原型链顶端都是Object对象。

    php中for和foreach比较

    1. php推荐用foreach。
    2. for需要事先count(arr)计算数组长度,需要引入自增变量i,每次循环都要进行条件判断i<c,然后自增i++,输出数组元素时,arr[$i]需要进行哈希操作.
    3. foreach循环数组时,指针会自动指向下一个元素,不需要计算数组长度,没有条件判断和自增变量,调用元素时也没有哈希操作

    mysql与mysqli的区别

    1. mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。
    2. mysqli连接:一直都只使用同一个进程。

    php7和PHP5对比的新特性和性能优化

    1. 抽象语法树(AST): AST在PHP编译过程作为一个中间件的角色,替换原来直接从解释器吐出opcode的方式,让解释器(parser)和编译器(compliler)解耦,可以减少一些Hack代码,同时,让实现更容易理解和可维护
    2. Natice TLS:线程数据共享安全,开启一个全局线程用作数据共享内存空间
    3. 指定参数 返回值类型
    4. zval 结构的变化
    5. 异常处理
    6. 新的参数解析方式
    7. hashtable变化

    防止SQL注入

    1. 打开php的安全模式同时关闭用户组安全:safe_mode=On------safe_mode_gid = off
    2. 控制php脚本能访问的目录,设置为自己的网站更目录:open_basedir = D:/usr/www
    3. 关闭危险函数:display_function=
    4. 关闭PHP版本信息在http头中的泄漏:expose_php = Off
    5. 关闭注册全局变量:register_globals = Off(默认关闭)
    6. MYSQL的降权运行
    7. 使用mysql_real_escape_string函数对参数过滤

    预防XSS攻击

    1. 过滤从表单提交来的数据,使用php过滤函数htmlentities()中文一起转化,htmlspecialchars()不会转化中文默认情况下不处理单引号,最好加上第二个参数ENT_QUOTES
    2. 打开session.cookie_httponly
    3. 扩展remove_xss方法正则过滤

    预防CSRF攻击

    1. 在php.ini中设置禁用allow_url_fopen和allow_url_include
    2. 生成另一个一次性的令牌并将其嵌入表单,保存在会话中(一个会话变量),在提交时检查它

    PHP垃圾回收机制

    PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

    双引号和单引号的区别

    1. 双引号解释变量,单引号不解释变量
    2. 双引号里插入单引号,其中单引号里如果有变量的话,变量解释
    3. 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
    4. 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\
    5. 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

    获取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的区别

    1. isset 判断变量是否定义或者是否为空
    2. empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。
    3. is_null:检测传入的值(值、变量、表达式)是否为null

    相关文章

      网友评论

          本文标题:PHP开发经验总结

          本文链接:https://www.haomeiwen.com/subject/xjcbuqtx.html