PHP好用但又容易忽略的小知识
1、PHP函数之判断函数是否存在
当我们创建了自定义函数,并且了解了可变函数的用法,为了确保程序调用的函数是存在的,经常会先使用function_exists判断一下函数是否存在。同样的method_exists可以用来检测类的方法是否存在。
function func() {
}
if (function_exists('func')){
echo 'exists';
}
类是否定义可以使用class_exists
class MyClass{
}
// 使用前检查类是否存在
if (class_exists('MyClass')) {
$myclass = new MyClass();
}
PHP中有很多这类的检查方法,例如文件是否存在file_exists等
$filename = 'test.txt';
if (!file_exists($filename)) {
echo $filename . ' not exists.';
}
2、PHP函数之可变函数
所谓可变函数,即通过变量的值来调用函数,因为变量的值是可变的,所以可以通过改变一个变量的值来实现调用不同的函数。经常会用在回调函数、函数列表,或者根据动态参数来调用不同的函数。可变函数的调用方法为变量名加括号。
function name() {
echo 'jobs';
}
$func = 'name';
$func(); //调用可变函数
可变函数也可以用在对象的方法调用上
class book {
function getName() {
return 'bookname';
}
}
$func = 'getName';
$book = new book();
$book->$func();
静态方法也可以通过变量来进行动态调用
$func = 'getSpeed';
$className = 'Car';
echo $className::$func(); //动态调用静态方法
静态方法中,$this伪变量不允许使用。可以使用self,parent,static在内部调用静态方法与属性。
class Car {
private static $speed = 10; public static function getSpeed() {
return self::$speed;
} public static function speedUp() {
return self::$speed+=10;
}
}
class BigCar extends Car {
public static function start() {
parent::speedUp();
}
} BigCar::start();
echo BigCar::getSpeed();
3、PHP类和对象之对象的高级特性
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断。
class Car {
}
$a = new Car();
$b = new Car();
if ($a == $b) echo '=='; //true
if ($a === $b) echo '==='; //false
对象复制,在一些特殊情况下,可以通过关键字clone来复制一个对象,这时__clone方法会被调用,通过这个魔术方法来设置属性的值。
class Car {
public $name = 'car'; public function __clone() {
$obj = new Car();
$obj->name = $this->name;
}
}
$a = new Car();
$a->name = 'new car';
$b = clone $a;
var_dump($b);
对象序列化,可以通过serialize方法将对象序列化为字符串,用于存储或者传递数据,然后在需要的时候通过unserialize将字符串反序列化成对象进行使用。
class Car {
public $name = 'car';
}
$a = new Car();
$str = serialize($a); //对象序列化成字符串
echo $str.'<br>';
$b = unserialize($str); //反序列化为对象
var_dump($b);
4、PHP字符串之获取字符串的长度
php中有一个神奇的函数,可以直接获取字符串的长度,这个函数就是strlen()。
$str = 'hello';
$len = strlen($str);
echo $len;//输出结果是5
strlen函数对于计算英文字符是非常的擅长,但是如果有中文汉字,要计算长度该怎么办?
可以使用mb_strlen()
函数获取字符串中中文长度。
$str = "我爱你";
echo mb_strlen($str,"UTF8");//结果:3,此处的UTF8表示中文编码是UTF8格式,中文一般采用UTF8编码
5、PHP字符串之格式化字符串
如果有一个字符串$str = '99.9';,怎么样使这个字符串变成99.90呢?
我们需要用到PHP的格式化字符串函数sprintf()
函数说明:sprintf(格式, 要转化的字符串)
返回:格式化好的字符串
$str = '99.9';
$result = sprintf('%01.2f', $str);
echo $result;//结果显示99.90
解释下,上面例子中的格式
这个 %01.2f 是什么意思呢?
1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。
2、跟在 % 符号后面的是 0, 是 "填空字元" ,表示如果位置空着就用0来填满。
3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。
如果把 1 改成 6,则 $result的值将为 099.90
因为,在小数点后面必须是两位,99.90一共5个占位,现在需要6个占位,所以用0来填满。
4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23.
为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。
5、最后,以 f "转换字符" 结尾。
6、PHP字符串之字符串的转义
php字符串转义函数addslashes()
函数说明:用于对特殊字符加上转义字符,返回一个字符串
返回值:一个经过转义后的字符串
$str = "what's your name?";
echo addslashes($str);//输出:what\'s your name?
PHP好用但又容易忽略的小知识的更多相关文章
- 容易忽略的小知识之 Date 函数参数
Date 对象启用基本存储器并取得日期和时间. dateObj = new Date()dateObj = new Date(dateVal)dateObj = new Date(year, mont ...
- MySQL不常用、易忽略的小知识
笔者从事开发也有一段时间了,关于数据库方面的一些小知识在这里总结一下 1.count(*),count(1)与count(column)区别 count(*)对行的数目进行计算,包含NULL coun ...
- 两个容易被忽略的mysql知识
原文:两个容易被忽略的mysql知识 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql ...
- 学习Java,容易被你忽略的小细节(3)
在<学习Java,容易被你忽略的小细节(2)>中我们已经深入讨论过String类中equals()方法的使用,在本文中我们将进一步讨论equals()方法在其他境况下的使用方法. 首先,我 ...
- 学习Java,容易被你忽略的小细节(2)
昨天心情真的太糟糕了,写完<学习Java,值得注意你注意的问题(1)>之后,迎来些许的支持以后就是一片片的谴责.我的主页上涌现出许许多多Java方面的牛人,谴责我水平太低,写的问题太初级. ...
- 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》
记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...
- Fiddler使用过程中容易忽略的小技巧
fiddler的基本使用,在之前的一篇博文中有详细介绍,可参见Fiddler抓包工具使用详解,今天来分享几个容易忽略的小技巧. 1.ios机装了证书,依然抓不到包 近期总被同事问及ios机装了证书,但 ...
- javascript 容易忽略的小知识点 new到底做了什么?
问题:平时我们经常写 var ss = new Person():ss就是一个由'Person类'生成的对象了,可是我们的Person方法里却没有写 return: (var ss= Person() ...
- Java被忽略的基本知识(四)
Java IO(不是一般的重要) 54.IO中的流:字节流(InputStream.OutputStream).字符流(Reader.Writer).转换流(InputStreamReader.Out ...
随机推荐
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 本人提供微软系.NET技术顾问服务,欢迎企业咨询!
背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...
- TODO:macOS上ThinkPHP5和Semantic-UI集成
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
- 使用Zabbix监控Oracle数据库
Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
- SDWebImage源码解读 之 NSData+ImageContentType
第一篇 前言 从今天开始,我将开启一段源码解读的旅途了.在这里先暂时不透露具体解读的源码到底是哪些?因为也可能随着解读的进行会更改计划.但能够肯定的是,这一系列之中肯定会有Swift版本的代码. 说说 ...
- 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议114~117)
建议114:不要在构造函数中抛出异常 Java异常的机制有三种: Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,Thre ...
- Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现
文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...
- AndroidStudio — Error:Failed to resolve: junit:junit:4.12错误解决
原博客:http://blog.csdn.net/u013443865/article/details/50243193 最近使用AndroidStudio出现以下问题: 解决:打开app下的buil ...
- 用Kotlin实现Android定制视图(KAD 06)
作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关c ...