PHP其余知识集合

命令行执行PHP代码三种方式

  • 一、/usr/local/php/bin/php 后面跟上某个PHP文件
  • 二、/usr/local/php/bin/php -r “这里直接写上PHP代码”
  • 三、建立一个文件,在第一行写上下面代码php

    #! /usr/local/php/bin/php 
       <?php
           ....

命令行传参

  • 两个全局变量
    $argc和$argv
  • php -v 经过$argv[1]能够获取到-v

PHP换行

  • 在控制台输入换行
    windows系统是\r\n,linux系统是\n,通常直接使用PHP_EOL
  • 在HTML里面换行
    输入<br/>

对象(资源)传递

  • 值传递
    除了对象和资源,其余类型的值传递都是数据拷贝,各自独立。
    而对象和资源的值传递很特别,看起来很像引用传递,但其实只是中间多了一个对象标识。
    图片描述
  • 引用传递
    除了对象和资源,其余类型的引用传递都是指向一样的数据,各自互相影响。
    而对象和资源的引用传递都是指向中间的对象标识。
    图片描述

对象数组的json化

  • 对象与关联数组的json_encode()都会转化成{"name":value}字符串形式,只有纯索引数组才会转化成[value1,value2]字符串形式
  • 对象数组的字符串使用json_decode()会转成对象数组,若是使用json_decode($strArr,true)会转成二维数组

Linux与Win文件路径分隔符

  • windows使用的是 \
  • linux使用的是 /
  • 在PHP提供了一个内置常量解决不一样系统中路径的问题:DIRECTORY_SEPARATOR
  • linux只可使用 /,而windows 两种均可以使用,因此通常都转换成linux的分隔符
str_replace('\\', '/', __FILE__)

Linux、Mac与Win 文本换行符

  • 在unix系列用 \n
  • 在windows系列用 \r\n
  • 在mac用 \r
  • PHP提供PHP_EOL来替代,以提升代码的源代码级可移植性
echo PHP_EOL;
           //windows平台至关于    echo "\r\n";
           //unix\linux平台至关于    echo "\n";
           //mac平台至关于    echo "\r";

父类中也能够调用子类的方法(使用反射)

  • 在父类中定义(_initialize()父类中没有)
public function __construct() {
         //控制器初始化
         if(method_exists($this,'_initialize'))
         $this->_initialize();
    }
  • 在子类中定义_initialize()方法
  • 最后再实例化子类时,就会在父类的构造函数中调用子类定义的方法

防止页面超时

  • set_time_limit ( int $seconds ) //设置脚本最大执行时间
  • 设置容许脚本运行的时间,单位为秒。若是超过了此设置,脚本返回一个致命的错误。默认值为30秒

PHP中超全局变量$GLOBALS和global的区别

  • $GLOBALS是外部的全局变量自己
  • global是外部全局变量的同名引用或者指针
<?php
    $var1 = 1;
    function test(){
        global $var1;
        unset($var1);
    }
    test();
    echo $var1; //输出1
?>

<?php
    $var1 = 1;
    function test(){
        unset($GLOBALS[‘var1′]);
    }
    test();
    echo $var1;//输出空白
?>

PHP中的错误抑制符@的使用

  • @的做用:只是不让系统报错,屏蔽了错误
  • @的适用:变量,函数和 include 调用,常量
  • @的应用:
    出错了对你影响不大, 你也不关心这个错误是什么, 你也不会安排额外的逻辑来处理这种错误, 那么你可使用错误抑制. 不然, 请你使用额外的逻辑来判断错误。
    PHP通常异常处理:最重要是要捕获到异常,而后作一些特殊处理
  • @的例子:
@include('file');
//等同
$foo = error_reporting(0);
include('file');
error_reporting($foo);
//因此不少步骤都重复了,因此尽可能少用,避免开销

PHP类内部调用类外部定义的变量(3种方式),实如今类中引用外部定义的全局变量

  • 经过传递外部参数到类内部
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function __construct($url=''){
                        $this->url = $url;
                }
                function showUrl(){
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>
  • 在PHP类方法中使用global关键字直接引用类外部变量
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function showUrl(){
                        global $url;
                        $this->url = $url;
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>
  • 在PHP类方法中直接使用$GLOBALS全局数组引用类外部变量
<?php
        $url = 'http://www.51-n.com/';
        
        class test{
                public $url;
                function showUrl(){
                        $this->url = isset($GLOBALS['url'])?$GLOBALS['url']:'';
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>

PHP性能优化

  • 少写PHP代码,多用PHP自身能力(内置变量、常量、函数)
  • PHP内置函数的性能优劣选择
  • 建议不要使用错误抑制符@
  • 减小计算密集型业务
  • 避免在循环内循环条件作运算

htmlentities()和htmlspecialchars()区别

  • htmlspecialchars() 只转化html的5种字符
&   &amp;

"   &quot;

'   &#039; (for ENT_HTML401) or &apos; (for ENT_XML1, ENT_XHTML or ENT_HTML5), but only when ENT_QUOTES is set 

<   &lt;

>   &gt;
  • htmlentities() 转化全部的html代码,除上面5种字符之外,中文也会转化成html实体
$str='<a href="test.html">测试页面</a>'; 
echo htmlentities($str);  // <a href="test.html">²âÊÔÒ³Ãæ</a> 

$str='<a href="test.html">测试页面</a>'; 
echo htmlspecialchars($str);  // <a href="test.html">测试页面</a>
  • 有中文的时候,最好用 htmlspecialchars ,不然可能乱码
  • htmlspecialchars() 对应 htmlspecialchars_decode()
  • htmlentities() 对应 html_entity_decode()

$_POST、$HTTP_RAW_POST_DATA与php://input的区别

  • 因为$HTTP_RAW_POST_DATAphp://input做用同样,但区别以下:

一、$HTTP_RAW_POST_DATA 须要配置 php.ini 中的 always_populate_raw_post_data 值为 On 才会生效,而 php://input 无需配置就生效
二、当 $_POSTphp://input 能够取到值时 $HTTP_RAW_POST_DATA 为空
三、$HTTP_RAW_POST_DATA 从php5.6起就开始过期了,并在php7.0中正式删除,而用 php://input 替代html

相同点:
一、不能用于 enctype="multipart/form-data"(也叫Content-Type)linux

  • $_POSTphp://input 的区别以下:

一、Content-typeapplication/x-www.form-urlencodedmultipart/form-data时,$_POST才有值,获得的数据是通过urldecode解码处理
二、除了Content-typemultipart/form-data时,php://input没值之外,其余状况都有值,例如:application/json、text/xml、text/plain
三、文件上传只能经过$_POST获取值
四、其余方式如:put/delete,也只能经过php://input获取json

instanceof使用注意

  • 判断对象是否属于某类,此类能够是父类、爷类就会返回true,不然返回false

echo、print、print_r()、printf()、sprintf()、var_dump()区别

  • echo :是语句不是函数,没有返回值,可输出多个变量值,不能输出数组和对象,只能打印简单类型(如int,string,bool,float,null)。
  • print :是语句不是函数,有返回值 1 ,只能输出一个变量,不能输出数组和对象,只能打印简单类型(如int,string,bool,float,null)。
  • echo与print基本用法一致,但区别以下:
    一、echo没有返回值,print有返回值
    二、echo能够输出多个参数,print只能够输出一个参数

  • print_r :是函数,能够打印复合类型,例如:array、object等,主要用于数组打印
  • printf :是函数,把文字格式化之后输出。
  • sprintf :是函数,不打印,而是返回格式化后的文字,其余的与printf同样。
  • var_dump :是函数,输出变量的内容、类型或字符串的内容、类型、长度。经常使用来调试。

运算符 &、|、&&、|| 之间的区别

  • & :位与运算符,返回是int数据类型
  • | :位或运算符,返回是int数据类型
//位与或位或时 数据类型转换
TRUE => 1
FALSE => 0
''与'0' => 0  //按字符串转数值类型的规矩
[] => 0   
非空数组 => 1

12 | [] //12
TRUE & '8' //0
TRUE | '8' //9
  • && :与运算符,返回是bool数据类型
  • || :或运算符,返回是bool数据类型

子类重写父类方法的限制

  • 父类中final方法是不能够重写的
  • 子类重写父类方法只可宽松,不可严谨
  • 重写方法名称必须相同

大括号的做用

  • 做用域-------例如:function fn(){}
  • $str{4}在字符串的变量的后面跟上{},大括号和中括号同样都是把某个字符串变量当成数组处理
  • {$val},这时候大括号起的做用就是,告诉PHP,括起来的要当成变量处理。

var_export()用法

  • php数据原型输出
$msg = 'xxx';
var_export($msg); //输出'xxx'
var_export($msg,true); //不输出,只返回 'xxx'
  • 动态生成.php文件
$msg = 'nihao';
$content = '<?php'.PHP_EOL;
$content.= '$a ='.var_export($msg,true).';'.PHP_EOL;
$content.= 'echo $a;'.PHP_EOL;
$content.= '?>';
file_put_contents('./test.php',$content);

include与request 内外调用用法

包含进来的文件,其实与原文件至关合并
一、外面文件能够访问里面文件定义的变量(在include以后定义的变量)
二、里面文件能够访问外面文件在include以前定义的变量
相关文章
相关标签/搜索