1

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

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

       #! /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作用一样,但区别如下:

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

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

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

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

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基本用法一致,但区别如下:
    1、echo没有返回值,print有返回值
    2、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 内外调用用法

包含进来的文件,其实与原文件相当合并
1、外面文件可以访问里面文件定义的变量(在include之后定义的变量)
2、里面文件可以访问外面文件在include之前定义的变量

104828720
1.4k 声望222 粉丝

编程其实很枯燥,所以一定要有追求。