* 判断一个对象是否属于某个类的实例
$obj instanceof Test
* 如果被继承的方法和属性被覆盖,可以使用 parent:: 来访问被覆盖的方法或属性
* 关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称
<?php
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>
会输出 NS\ClassName
*可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性则是用 ::(双冒号):self::$property 来访问
* 类常量定义const constant = 'constant value'; 如果是文件的可以使用define("GREETING", "Welcome to W3School.com.cn!");
区别
1 const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
2 const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量
3 const不能在条件语句中定义常量。
例如:
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
* 带参数的构造函数
function __construct1($a1)
{
echo('__construct with 1 param called: '.$a1.PHP_EOL);
}
function __construct2($a1,$a2)
{
echo('__construct with 2 params called: '.$a1.','.$a2.PHP_EOL);
}
* 单例模式(静态函数在类实例化之前就已经编译好了,所以效率就比较高)
<?php
class db {
//...
private static $instance;
//...
public static function singleton() {
if(!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c();
}
return self::$instance;
}
//...
}
?>
* 如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承(如果属性被声明成final那么不能被修改,这是java的但是php不能给属性声明final)
* 被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问
* 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量(echo MyClass::CONST_VALUE;)
* abstract定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现
*接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
* 抽象类和接口的区别
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
*Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集
例如
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hello World!';
}
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHello() {
echo 'Hello Universe!';
}
}
$o = new TheWorldIsNotEnough();
$o->sayHello();
?>
以上例程会输出:
Hello Universe!
*所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字
* php所有的类型
Boolean 布尔类型,Integer整型,Float浮点型,String字符串,Array数组,Object对象,Resource资源类型,NULL,Callback回调类型
2015/10/15
*PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
例如
<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>
2015/10/15
*php die() 和 exit其实只是名称上的区别,但是die可以带参数die("参数")
* try catch的使用
try{
try{
会抛出异常的代码(结果不唯一)
}catch{
if(是我们自定定义的异常){
自己看怎么处理
}else{
throw(重新抛出去吧)
}
}
}catch{
系统的错误我们爱怎么处理就怎么处理吧
}
这样写的好处是我们不用自己去判断各种结果 什么
if(0) if(-1) 这样一大堆啦
我们写api当然就想知道我们的结果是什么然后直接返回就好了
*js参数传递的时候是引用传递,而php是拷贝传递(写时拷贝)
function test($a){
$a++(这个其实就是写时拷贝,)
}
*
Fast-CGI运行模式
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。
*如何实现框架的全局事务(像mysql,cookie,session,cache)
如果是mysql他本身有事务机制,如果是cookie我们可以将结果写入到一个全局的数组(静态类就可以了),这样就可以模拟事务机制了
* 定义数组就直接 $arr = array('a' => 1,'b' => 2);
不要 $arr['1']=1;$arr['b']=2 这样每次都要去找$arr
$obj instanceof Test
* 如果被继承的方法和属性被覆盖,可以使用 parent:: 来访问被覆盖的方法或属性
* 关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称
<?php
namespace NS {
class ClassName {
}
echo ClassName::class;
}
?>
会输出 NS\ClassName
*可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性。静态属性则是用 ::(双冒号):self::$property 来访问
* 类常量定义const constant = 'constant value'; 如果是文件的可以使用define("GREETING", "Welcome to W3School.com.cn!");
区别
1 const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
2 const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量
3 const不能在条件语句中定义常量。
例如:
if (...){
const FOO = 'BAR'; // 无效的invalid
}
if (...) {
define('FOO', 'BAR'); // 有效的valid
}
* 带参数的构造函数
function __construct1($a1)
{
echo('__construct with 1 param called: '.$a1.PHP_EOL);
}
function __construct2($a1,$a2)
{
echo('__construct with 2 params called: '.$a1.','.$a2.PHP_EOL);
}
* 单例模式(静态函数在类实例化之前就已经编译好了,所以效率就比较高)
<?php
class db {
//...
private static $instance;
//...
public static function singleton() {
if(!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c();
}
return self::$instance;
}
//...
}
?>
* 如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承(如果属性被声明成final那么不能被修改,这是java的但是php不能给属性声明final)
* 被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问
* 范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员,类常量(echo MyClass::CONST_VALUE;)
* abstract定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现
*接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有,这是接口的特性。
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
* 抽象类和接口的区别
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
*Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集
例如
<?php
trait HelloWorld {
public function sayHello() {
echo 'Hello World!';
}
}
class TheWorldIsNotEnough {
use HelloWorld;
public function sayHello() {
echo 'Hello Universe!';
}
}
$o = new TheWorldIsNotEnough();
$o->sayHello();
?>
以上例程会输出:
Hello Universe!
*所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字
* php所有的类型
Boolean 布尔类型,Integer整型,Float浮点型,String字符串,Array数组,Object对象,Resource资源类型,NULL,Callback回调类型
2015/10/15
*PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
例如
<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>
2015/10/15
*php die() 和 exit其实只是名称上的区别,但是die可以带参数die("参数")
* try catch的使用
try{
try{
会抛出异常的代码(结果不唯一)
}catch{
if(是我们自定定义的异常){
自己看怎么处理
}else{
throw(重新抛出去吧)
}
}
}catch{
系统的错误我们爱怎么处理就怎么处理吧
}
这样写的好处是我们不用自己去判断各种结果 什么
if(0) if(-1) 这样一大堆啦
我们写api当然就想知道我们的结果是什么然后直接返回就好了
*js参数传递的时候是引用传递,而php是拷贝传递(写时拷贝)
function test($a){
$a++(这个其实就是写时拷贝,)
}
*
Fast-CGI运行模式
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
FastCGI的工作原理
1、Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3、当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4、 FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的 好处是,持续数据库连接(Persistent database connection)可以工作。
*如何实现框架的全局事务(像mysql,cookie,session,cache)
如果是mysql他本身有事务机制,如果是cookie我们可以将结果写入到一个全局的数组(静态类就可以了),这样就可以模拟事务机制了
* 定义数组就直接 $arr = array('a' => 1,'b' => 2);
不要 $arr['1']=1;$arr['b']=2 这样每次都要去找$arr