PHP

include中的文件名要大小写准确,在windows服务器上可能不敏感,在linux服务器上就敏感了。
获取内容时,$results=@file_get_contents( $url );也许不够用,用curl替代时,要测试需不需要agent头,或agent头是加的否不准确。
var_dump(curl_error( $url )); 输出错误信息,DNS解析失败可能导致curl_exec返回false,例如:
bool(false) Could not resolve host: www.jb51.net; Name or service not known
解决这个问题是重启了php-fpm:systemctl restart php-fpm

Centos7重启apache、nginx、mysql、php-fpm命令方法
https://www.jb51.net/article/134271.htm

php emoji
http://blog.wpjam.com/article/emoji-for-php-mysql/
https://github.com/iamcal/php-emoji
http://www.easyapns.com/iphone-emoji-alerts

在php4中,类中的属性都用var声明,php5中增加了public、private、protected。var和public效果一样。
注意使用public、private、protected时,不需要再使用var。

在双引号字符串中使用对象属性值时要使用大括号,例如 “{$obj->name},{$obj->getName()}”,{$val1}大括号起的作用是告诉PHP括起来的要当成变量处理。
在字符串的变量的后面跟上大括号和中括号一样,都是把某个字符串变量当成数组处理
$str = ‘abcdefg’;
echo $str{4};

php允许动态给对象增加属性,所以拼写错属性不会带来编译和执行上的错误,但可能带来业务上的错误。但这在面向对象编程中不是一个良好的做法。

类中的函数称为方法,省略可见性关键字时,隐式是public的。

伪变量(pseudo variable)$this指向当前对象,而self指向当前类,例如:$this->name,self::$staticName。

在php5中,应该将构方法命名为: function __construct(参数…)
同样地,也提供了析构方法function __destruct(),显示销毁对象,可以unset($obj),
__call(),__destruct()这一系列方法也称为魔法方法,magic method.

php是弱类型语言,即不需要声明类型,但它也提供了一些is_开头的类型检查函数,例如is_null(),is_array()等。
instanceof操作符,例如:if($obj instanceof ClassA){}

在子类构造方法中调用父类的构造方法 parent::__construct();

常量用const声明,并且不带$符号,一般大写。常量类型只能是基本数据类型,和静态类型一样只能使用类访问符方法常量属性,例如:
ClassA::constA,ClassA::$staticB

以class关键字前面使用abstract关键字来定义一个抽象类,并且至少包含一个抽象方法,抽象方法也要用abstract声明,并且不包括方法体。

对象类型的变量可以加类型声明,例如:ClassA #a=NULL;

接口用关键字interface来声明,接口可能包含属性和方法声明,方法声明不能有方法体。

SimpleXMLElement

try catch throw

final 类不能被继承,final 方法不能被重写。

定义function __toString()方法,使用对象可以像字符串一样被输出,这对于日志和错误报告有用。

等值判断==,等值且都是对像===,但都不会判断两者指向同一个对象。
clone关键字会使用值复制方式生成一个新对象,例如:$second=clone $first;
可以重写function __clone()方法,在clone生成新对象后,__clone()会被调用。可以在__clone()方法中实现动态修改不要被默认复制的对象,及实现深复制。

反射,reflection,指的是程序对运行中的类自身进行检查。
file_exists(),class_exists(),method_exists(),动态方法名,例如:$method=”method1″;$this->$method();php允许使用字符串来动态的引用类。
拦截器方法,拦截对未定义的属性或方法的操作:__get(),__set(),__isset(),__unset(),__call(),
get_class($obj1)返回对象的类名,
检测对象中方法是否存在 if(in_array($method1,get_class_methods($obj1))){$obj1->$method1()}
is_callable()不仅检查方法是否存在,还检查是否可以调用。
可以使用文件系统来组织出php包,因为在包含文件时需要给出相对路径。

require()在调用文件发生错误时,会停止整个程序;include()在调用文件发生错误时,会生成警告,并停止执行包含文件,跳出代码后继续执行下面的代码。所以require更加安全,include适用于加载模板。它们都是语句不是函数,

PEAR,PHP扩展与应用库。

命名空间应用于文件级别,其声明应该是文件中的第一条语句。
声明命名空间:namespace namespace1::namespace11;
导入命名空间:import namespace1::namespace11 as aliasName1;

在php系统中设置include_path,例如在php.ini或.htaccess中配置。还可以在程序中使用set_include_path()动态的设置包含路径,例如set_include_path(get_include_path(),”:/path1″);,在unix环境中使用冒号分隔。

自动加载拦截器 function __autoload()
DIRECTORY_SEPARATOR

打印数组内容
print_r(get_class_methods($item));
print_r(get_class_vars($item));
get_parent_class(),
is_subclass_of()只查找类继续关系,不查找接口。查找接口用instanceof操作符。

call_user_func(),call_user_func_array()也可以达到使用字符串动态调用方法,

php反射api是强大的类测试工具,它包括一些Reflection开头的一些类。
应该经常使用它而少使用类和对象函数。反射的另一个用途是根据命名规则创建一个调用模板类中方法的框架。

正交:将职责相关的组件结合在一起,并与外部系统隔开,保持独立性。

php4不支持隐藏数据,不得不使用文档和命名惯例来说明数据的隐私性。例如,以下划线开头的属性通常是私有属性。

empty()

PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php_mysql.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll等等扩展来连接MySQL、PostgreSQL、MS SQL Server、SQLite

#也可以注释单行
define()也可以定义常量。
php提供了大量的预定义变量

从php5开始,php新增了一些内置的标准扩展库和外部扩展库。

一些php命令

php -m #查看php的所有扩展模块 

php启示录,一些php知识及docker下搭建lnmp。

PHP启示录

HHVM (HipHop Virtual Machine) 是 Facebook 开源的 PHP 执行引擎。 HHVM 采用一种JIT(just-in-time)的编译机制实现了高性能,同时又保持对 PHP 语法的充分支持。 在 Facebook 实际应用场景中,与 Zend PHP 5.2 引擎 + APC 相比,HHVM 实现了9倍的吞吐量提升和5倍的内存节约。HHVM 可以作为一个独立的 webserver 运行,也可以提供 fastcgi 接口,挂在 webserver 下面。

发表评论