命令行执行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种字符
& &
" "
' ' (for ENT_HTML401) or ' (for ENT_XML1, ENT_XHTML or ENT_HTML5), but only when ENT_QUOTES is set
< <
> >
- 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_DATA
与php://input
作用一样,但区别如下:
1、$HTTP_RAW_POST_DATA
需要配置 php.ini 中的 always_populate_raw_post_data
值为 On 才会生效,而 php://input
无需配置就生效
2、当 $_POST
与 php://input
可以取到值时 $HTTP_RAW_POST_DATA
为空
3、$HTTP_RAW_POST_DATA
从php5.6起就开始过时了,并在php7.0中正式删除,而用 php://input
替代
相同点:
1、不能用于 enctype="multipart/form-data"
(也叫Content-Type)
-
$_POST
与php://input
的区别如下:
1、Content-type
为application/x-www.form-urlencoded
或multipart/form-data
时,$_POST
才有值,得到的数据是经过urldecode
解码处理
2、除了Content-type
为multipart/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之前定义的变量
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。