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

php小分点

2016-02-28 23:54 651 查看
1. 变量函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找 与变量的值相同的函数,并且将尝试执行它。除了别的事情以外,这个可以被 用于实现回调函数,函数表等等。

 

class Foo

{

    function Var()

    {

$name = 'Bar';

$this->$name(); // This calls the Bar() method

    }

 

    function Bar()

    {

echo "This is Bar";

    }

}

 

$foo = new Foo();

$funcname = "Var";

$foo->$funcname();   // This calls $foo->Var()

 

 

2. 对象复制中引用的区别:

 

class a{

    public $name = 'ajia';

 

    //只在使用clone关键词进行对象复制时候起作用

    public function __clone(){

$this->name = 'youxi';

    }

}

 

$a = new a();  

$b = clone $a;  //使用clone关键词来对象复制是值的复制,也就是说$a和$b指向的是两个不同的实例,如果直接使用$b = $a 的话就是引用的复制,php5.3以后默认的对象复制是引用复制

 

var_dump($a);

var_dump($b);

 

 

 

 

$redis->pexpireAt( 键值, 微秒 ):设置在某个时间点过期,单位是微秒

$redis->psetex($键值, 微秒, 值);设置值同时设定过期时间

 

3. 分表的表名取名字的方法之一:

$table_name = 'js_coupon_user_'.($user_id%10+1);

 

 

 

 

4. array_multisort多维数组排序

$users = array(

    array('name' => 'tom', 'age' => 20)

    , array('name' => 'anny', 'age' => 18)

    , array('name' => 'jack', 'age' => 22)

, array('name' => 'ajia', 'age' => 22)

);

 

$ages = $names = array();

foreach ($users as $user) {

    $ages[] = $user['age'];

$names[] = $user['name'];

}

array_multisort($ages, SORT_ASC, $names, SORT_DESC, $users);

 

print_r($users);

 

 

 

 

5================

 

1.socket协议:AF_INET  AF_INET6  AF_UNIX  

 

2.socket类型:SOCK_STREAM  SOCK_DGRAM  SOCK_SEQPACKET  SOCK_RAW  SOCK_RDM  

 

3.公共协议类型:

icmp: Internet Control Message Protocol  互联网控制信息协议,用于主机和网关之间,检测网络状况和报告错误

UDP: User Datagram Protocol             是一个无连接的、不可靠的、具有固定最大长度的报文协议。由于这些特性,UDP 协议拥有最小的协议开销。   

TCP: ransmission Control Protocol       是一个可靠的、基于连接的、面向数据流的全双工协议。TCP 能够保障所有的数据包是按照其发送顺序而接收的。如果任意数据包在通讯时丢失,TCP 将自动重发数据包直到目标主机应答已接收。因为可靠性和性能的原因,TCP 在数据传输层使用
8bit 字节边界。因此,TCP 应用程序必须允许传送部分报文的可能。

 

 

 

$commonProtocol = getprotobyname("tcp");                         //通过getprotobyname函数获取tcp协议号码,也就是公共协议类型

$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);  //socket_create函数的3个参数就是以上socket链接的3个组成部分,第三个参数是公共协议类型,除了用getprotobyname函数生成,还可以直接使用常量
SOL_TCP 和 SOL_UDP 

socket_bind($socket, 'localhost', 1337);                         //socket绑定到一个IP地址和某一个端口上

socket_listen($socket);                                          //监听所有进来的socket连接

// More socket functionality to come

 

 

 

6============

 gethostbyname($host);  //根据域名获取主机也就是ip地址

 

 

7. defined():判断"常量"是否已经存在

8. realpath('./redis/send.php');  //获取绝对路径

9. $_SERVER['SCRIPT_FILENAME']    //执行文件的路径   ,__FILE__:__FILE__常量所在的文件路径

 

 

10==========

set_include_path('redis/');                                        //动态修改php配置文件中include_path的值,require和include包含文件时候会先去该参数所指定的路径去查找

set_include_path( get_include_path().PATH_SEPARATOR."socket/"  );  //在原有的include_path值后新增路径

$includePath  = ini_get('include_path');

$includePath2 = get_include_path();                                //获取php配置文件中include_path的值

 

ps:

如果在指定的目录下找不到所要求包含的文件,而在当前页面目录下正好存在这个名称的文件时,则默认引入当前目录下的该文件。

当指定了多个目录为 include_path ,而所要求包含的文件在这几个目录都有相同名称的文件存在时,php选择使用设定 include_path 时排位"居前"的目录下的文件。

 

 

11==========

$b = file_put_contents("youxi.php",'');   //写入空内容生成文件

var_dump($b);

exit;

 

$time = time()-3600;

$a = touch("ajia.php", $time);            //如果文件不存在则生成文件,存在则修改文件的修改时间

var_dump($a);

 

 

12==========

$path = "/testweb/home.php";

echo basename($path);         //显示带有文件扩展名的文件名

echo basename($path,".php");  //显示不带有文件扩展名的文件名

 

 

13==========

define( "SEPARATOR", "/" );

define( "__ROOT__",  dirname(__FILE__) );

//$fileName = basename(__FILE__ , ".php");      //第二个参数是过滤作用

 

$appDir = __ROOT__.SEPARATOR."app";

 

if( true !== is_dir($appDir) ){

    $rel = mkdir( $appDir, 0755, true );       //默认创建的目录权限是小于等于系统umask权限

    //chmod( $appDir, 0777 );                  //chmod不会受umask的限制,可建立任意权限

}

 

$tem = is_writeable($appDir);                  //判断是否可写

var_dump($tem);

 

 

14==========

register_shutdown_function( array('ajia', 'demo') );      //参数可以直接是函数名,可以是array('类名','静态方法名称')

//注册php进程终止后的回调函数,该函数被执行的情况可以是:

    1、当页面被用户强制停止时,使用exit、die等函数

    2、当程序代码运行超时时

    3、当php代码执行完成时

 

 

15==========

ob_start();              //表示从这里开始进入缓冲区,如果没有使用该函数则默认是从php进程开始

$a = ob_get_contents();  //获取缓冲区内容

ob_flush();              //输出缓冲区内容

ob_clean();              //清空缓冲区内容

ob_end_flush();          //输出缓冲区内容并关闭缓冲区

ob_end_clean();          //清空缓冲区内容并且关闭缓冲区

 

 

16==========

get_defined_constants(true/false)  //获取已经通过define定义的常量,参数为true,则会区分常量的用户还是系统

 

strip_tags( 字符串,需要保留的标签 ):过滤字符串中的html或xml标签

 

strtolower( 字符串 ):将字符串全部转换为小写,strtouper则相反

 

ucfirst( 字符串,大小写标识 ):将字符串首字母转换成大小写,默认是大写

 

array_search与in_array()类似

 

array_walk():对数组元素(一维数组)进行回调函数,例如:

 

$arr = array("ajia" => 37, "youxi"=>18);

 

//第一个参数是数组的值,第二个是数组的key,第三个开始是array_walk传递给回调函数的参数

function is_call_back( $value, $key ){  

echo "{$key} age is: {$value}";

}

 

array_walk( $arr, "is_call_back" );

 

而array_walk_recursive()则可以对二位数组进行回调函数处理

 

 

class_exists( 类名,是否自动加载 ):判断类是否被定义,默认会自动执行__autoload()加载

 

 

//通过反射类执行类方法的2中方式

 

class BlogAction {

 

    public function detail() {

        echo 'detail' . "\r\n";

    }

 

}

 

$blog = new BlogAction();  //实例化

 

// ReflectionMethod反射类直接反射到类的方法,并不能直接判断该方法是否存在,通过try{}catch{}来捕捉异常

try{

 

    $method = new ReflectionMethod('BlogAction', 'detaigl');  //第一个参数可以是类名或者实例化对象

    $method->invoke( $blog );

 

}catch ( Exception $e ){

    $msg = $e->getMessage();

    echo $msg;

}

 

 

$class    = new ReflectionClass($blog);       //第一个参数可以是类名或者实例化对象

$isExists = $class->hasMethod('detssail');

 

if( true === $isExists ){

    $classMethod = $class->getMethod('detail');

    $classMethod->invoke($blog);

}

 

 

 

//异常处理

set_exception_handler( 'meEx' );  

//指定程序出现异常的处理方法,但是使用try{}catch{}的流程,则不会经过该指定方法,而是执行catch中的过程

//对于异常:要么通过try{}catch{}来捕捉,要么通过主动的throw new Exception()抛出

 

 

 

SAPI(Server Application Programming Interface): 服务器端应用编程端口,它提供了一个接口,使得PHP可以和其他应用进行交互数据;默认提供了很多种SAPI, 常见的给apache的mod_php5、CGI,给IIS的ISAPI,还有Shell的CLI

 

 

 

17==========

$className = get_class( $this ); 获取类名,而__CLASS__则表示当前的类名

 

 

18==========

echo getmypid();         返回 PHP 的进程id           ( php-fpm模式下,则返回的是真正执行php命令的进程的id) posix_getpid()也是该作用

echo $_SERVER['USER']    取得 PHP 进程id的拥有者名称 ( php-fpm模式下,则返回的是真正执行php命令的进程所有者名称 )

echo get_current_user(); 取得 PHP 进程id的拥有者名称 ( php-fpm模式下,则返回的是master process所有者的名称 )

echo mysql_thread_id(数据库连接资源id); 显示连接到mysql的进程id,如果是长连接的,可以通过show processlist 来查看到该id

 

 

19==========

php的cli文件(php)所在路径:/usr/local/php/bin/php

 

1.让 PHP 运行指定文件。

/usr/local/php/bin/php my_script.php

/usr/local/php/bin/php -f my_script.php

 

ps:以上两种方法(使用或不使用 -f 参数)都能够运行给定的 my_script.php 文件。您可以选择任何文件来运行,您指定的 PHP 脚本并非必须要以 .php 为扩展名,它们可以有任意的文件名和扩展名。

 

2.在命令行直接运行 PHP 代码。

/usr/local/php/bin/php -r 'print_r(get_defined_constants());' #尽量使用单引号

 

ps:在使用这种方法时,请您注意外壳变量的替代及引号的使用。

    请仔细阅读以上范例,在运行代码时没有开始和结束的标记符!加上 -r 参数后,这些标记符是不需要的,加上它们会导致语法错误。

 

3.将php脚本处理成自允许脚本:在php代码第一行加入:#! /usr/local/php/bin/php  后面的代码依旧是不变, 在赋予该文件可执行的权限,然后执行该文件即可

 

4.php脚本接受参数,在脚本后面直接带上参数,多个参数用空格分隔,含有空格的参数值需要用引号括起,在php代码中使用$argv变量来获取所有的参数,例如:

  命令行:/usr/local/php/bin/php my_script.php 'ajia is good' 99

  my_script.php代码:

  <?php print_r( $argv ); ?>

 

 

 

20==========

set_time_limit():设置允许脚本运行的时间,单位为秒。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。

                 当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒。

                 如果设置为0(零),没有时间方面的限制。

 

===>>>>>>>仅计算脚本自己执行的时间,调用system(),io操作,数据库查询,sleep() 函数不计算在脚本执行时间之内.

 

ignore_user_abort():设置与客户机断开是否会终止脚本的执行。可与set_time_limit配合使用,代码如下:

<?php

ignore_user_abort ( TRUE );

set_time_limit ( 0 );

$interval = 10;

$stop = 1;

do {

   if( $stop == 10 ) break;

   file_put_contents('liuhui.php',' Current Time: '.time().' Stop: '.$stop);  //即使客户端终止脚本,仍然每隔10秒钟执行一次,并打印出当前时间与终止点

   $stop++;

   sleep ( $interval );

} while ( true );

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