资讯专栏INFORMATION COLUMN

PHP其他知识集合

李涛 / 3259人阅读

摘要:引用传递除了对象和资源,其他类型的引用传递都是指向同样的数据,各自互相影响。与基本用法一致,但区别如下没有返回值,有返回值可以输出多个参数,只可以输出一个参数是函数,可以打印复合类型,例如等,主要用于数组打印是函数,把文字格式化以后输出。

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

1、/usr/local/php/bin/php 后面跟上某个PHP文件

2、/usr/local/php/bin/php -r “这里直接写上PHP代码”

3、创建一个文件,在第一行写上下面代码

   #! /usr/local/php/bin/php 
   

命令行传参

两个全局变量
$argc和$argv

php -v 通过$argv[1]可以获取到-v

PHP换行

在控制台输入换行
windows系统是 ,linux系统是 ,一般直接使用PHP_EOL

在HTML里面换行
输入

对象(资源)传递

值传递
除了对象和资源,其他类型的值传递都是数据拷贝,各自独立。
而对象和资源的值传递很特别,看起来很像引用传递,但其实只是中间多了一个对象标识。

引用传递
除了对象和资源,其他类型的引用传递都是指向同样的数据,各自互相影响。
而对象和资源的引用传递都是指向中间的对象标识。

对象数组的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系列用

在windows系列用

在mac用

PHP提供PHP_EOL来替代,以提高代码的源代码级可移植性

echo PHP_EOL;
           //windows平台相当于    echo "
";
           //unixlinux平台相当于    echo "
";
           //mac平台相当于    echo "
";
父类中也可以调用子类的方法(使用反射)

在父类中定义(_initialize()父类中没有)

   public function __construct() {
         //控制器初始化
         if(method_exists($this,"_initialize"))
         $this->_initialize();
    }

在子类中定义_initialize()方法

最后再实例化子类时,就会在父类的构造函数中调用子类定义的方法

防止页面超时

set_time_limit ( int $seconds ) //设置脚本最大执行时间

设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。默认值为30秒

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

$GLOBALS是外部的全局变量本身

global是外部全局变量的同名引用或者指针



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

@的作用:只是不让系统报错,屏蔽了错误

@的适用:变量,函数和 include 调用,常量

@的应用:
出错了对你影响不大, 你也不关心这个错误是什么, 你也不会安排额外的逻辑来处理这种错误, 那么你可以使用错误抑制. 否则, 请你使用额外的逻辑来判断错误。
PHP一般异常处理:最重要是要捕获到异常,然后做一些特殊处理

@的例子:

@include("file");
//等同
$foo = error_reporting(0);
include("file");
error_reporting($foo);
//所以很多步骤都重复了,所以尽量少用,避免开销
PHP类内部调用类外部定义的变量(3种方式),实现在类中引用外部定义的全局变量

通过传递外部参数到类内部

url = $url;
                }
                function showUrl(){
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>

在PHP类方法中使用global关键字直接引用类外部变量

url = $url;
                        echo $this->url;
                }
        }
        
        $test = new test($url);
        $test->showUrl();
?>

在PHP类方法中直接使用$GLOBALS全局数组引用类外部变量

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="测试页面"; 
echo htmlentities($str);  // ²âÊÔÒ³Ãæ 

$str="测试页面"; 
echo htmlspecialchars($str);  // 测试页面 

有中文的时候,最好用 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 = "";
file_put_contents("./test.php",$content);
include与request 内外调用用法
包含进来的文件,其实与原文件相当合并
1、外面文件可以访问里面文件定义的变量(在include之后定义的变量)
2、里面文件可以访问外面文件在include之前定义的变量

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22218.html

相关文章

  • Redis入门系列(五):Redis的Set类型

    摘要:与的比较元素无序,元素不可重复。好用的特性可以进行差集交集并集的运算。注意有个特性有序元素可重复。可以,但是不优雅,。类型使用类型,就很容易的对某个标签进行增加删除更改。 概念 可以想象一下高中学过的集合,一样。 SET与LIST的比较 SET:元素无序,元素不可重复。LIST:元素有序,元素可重复。 SET好用的特性 SET可以进行差集、交集、并集的运算。 命令 添加、删除元素 SA...

    付永刚 评论0 收藏0
  • jQuery学习和知识点总结归纳

    摘要:目前在前端开发所占的比重越来越高,在我们学习和开发的过程中都会去使用。下面把程序员雷雪松对的知识点总结和归纳分享给大家。过滤对同胞元素的搜索。将匹配元素集合缩减为集合中的最后一个元素。返回指定元素相对于其他指定元素的位置。 jQuery目前在Web前端开发所占的比重越来越高,在我们jQuery学习和开发的过程中都会去使用。jQuery帮我们解决了浏览器之间JS一些不兼容的地方和简化了原...

    JohnLui 评论0 收藏0
  • Laravel学习笔记之PHP对象遍历(Iterator)

    摘要:中在基础集合类路由类中和分页类中等,都用到了对象遍历这个小知识点,这些类都是实现了这个接口,这个接口定义,返回的是迭代器对象。标准扩展库中提供了很多默认迭代器实现类,比较常用的是数组迭代器对象,参考官网迭代器。 说明:本文章主要讲述PHP的对象遍历(Iterator)知识点。由于Laravel框架中就在集合(Collection)中用到了对象遍历知识点,故记录并学习之。同时,作者会将开...

    余学文 评论0 收藏0
  • SegmentFault 技术周刊 Vol.31 - 码农也要学算法

    摘要:记作称为算法的渐进时间复杂度,简称时间复杂度。学习数据结构与算法之链表链表一种常见的数据结构,可以存储有序的元素集合。首先在大的分类上,它们都是散列算法。 showImg(https://segmentfault.com/img/bVSDvj?w=900&h=385); 当人工智能、AlphaGo、无人驾驶、智能投顾等词语不断在人们视野中出现的时候,意味着我们正步入一个算法的时代。计算...

    cgspine 评论0 收藏0
  • 从能做什么到如何去做,一文带你快速掌握Python编程基础与实战

    摘要:本文的分享主要围绕以下几个方面能做什么常见应用场景介绍如何学习语法基础实战面向对象编程实战练熟基础小游戏项目的实现与实战一能做什么一种编程语言往往可以应用于多方面,有些方面比较常用,有些方面极为常用。比如表示是一个空列表。 摘要:Python语言的教程虽然随处可见,但是忙于日常业务/学习的你或许:一直想要找个时间学一点,但是又不知道该从何下手?本文将从Python能做什么,如何学习Py...

    BLUE 评论0 收藏0

发表评论

0条评论

李涛

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<