您的位置:首页 > 编程语言 > PHP开发

php总结二

2016-06-13 10:55 267 查看
* 判断一个对象是否属于某个类的实例

$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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: