杂记

1、php子类无 构造函数,实例化子类时默认会调用父类的构造函数;子类有构造函数,实例化子类时默认不会调用父类的父类的构造函数,需要在子类中使用parent::__construct()调用父类构造函数;这些同样适用于析构函数。

测试用例:

 1 <?php
 2 class A {
 3     public function __construct() {
 4         echo "A__construct\n";
 5     }
 6     public function __destruct() {
 7         echo "A__destruct\n";
 8     }
 9 }
10 
11 class B extends A {
12     public function __construct() {
13         echo "B__construct\n";
14     }
15     public function __destruct() {
16         echo "B__destruct\n";
17     }
18     public function bb() {
19         echo 'bb::';
20         parent::__construct();
21     }
22 }
23 
24 $objB = new B();
25 $objB->bb();
26 ?>

 

2、php函数引用返回语法:

 1 <?php
 2 class Test{
 3     private $var = array();
 4 
 5     public function &getVar() {
 6         return $this->var;
 7     }
 8 }
 9 
10 $obj = new Test();
11 $var = &$obj->getVar();
12 $var['a'] = 'b';
13 var_dump( $obj->getVar() );
14 ?>

 

3、php debug_backtrace函数使用用例:

1 <?php
2 // 文件 debug_backtrace1.php
3 class D1{
4     public function test1(){
5         var_dump(debug_backtrace());             
6     }
7 }    
8 ?>
 1 <?php
 2 // 文件 debug_backtrace2.php
 3 require "./debug_backtrace1.php";
 4 class D2{
 5     public function test1(){
 6         $d1 = new d1();
 7         $d1->test1();
 8     }
 9 }    
10 
11 $d2 = new D2();
12 $d2->test1();
13 ?>

运行debug_backtrace2.php,结果:

 1 [sujunjie@~/work/try]$php debug_backtrace2.php 
 2 array(2) {
 3   [0] =>
 4   array(7) {
 5     'file' =>
 6     string(44) "/home/sujunjie/work/try/debug_backtrace2.php"
 7     'line' =>
 8     int(6)
 9     'function' =>
10     string(5) "test1"
11     'class' =>
12     string(2) "D1"
13     'object' =>
14     class D1#2 (0) {
15     }
16     'type' =>
17     string(2) "->"
18     'args' =>
19     array(0) {
20     }
21   }
22   [1] =>
23   array(7) {
24     'file' =>
25     string(44) "/home/sujunjie/work/try/debug_backtrace2.php"
26     'line' =>
27     int(11)
28     'function' =>
29     string(5) "test1"
30     'class' =>
31     string(2) "D2"
32     'object' =>
33     class D2#1 (0) {
34     }
35     'type' =>
36     string(2) "->"
37     'args' =>
38     array(0) {
39     }
40   }
41 }

 

4、php判断常用汉字正则表达式。注意是“常用汉字”,并非“所有汉字”:

1 <?php
2 $p = '/^[\x{4e00}-\x{9fa5}]+$/u';
3 $str = '苏俊杰';
4 if (preg_match($p, $str, $m)) {
5     var_dump($m);
6 }
7 ?>

 

5、shell变量替换${}相关,摘自网络:

用一些例子加以说明${ }的一些特异功能:
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
我们可以用${ }分别替换获得不同的值:
${file#*/}:拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条/及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个.  及其左边的字符串:file.txt
${file##*.}:拿掉最后一个.  及其左边的字符串:txt
${file%/*}:拿掉最后条/及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条/及其右边的字符串:(空值)
${file%.*}:拿掉最后一个.  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个.  及其右边的字符串:/dir1/dir2/dir3/my


记忆的方法为:#是去掉左边(在鉴盘上#在$之左边)
%是去掉右边(在鉴盘上%在$之右边)
单一符号是最小匹配﹔两个符号是最大匹配。

${file:0:5}:提取最左边的5个字节:/dir1
${file:5:5}:提取第5个字节右边的连续5个字节:/dir2

我们也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir替换为path:/path1/path2/path3/my.file.txt

posted @ 2015-02-26 11:38  soj  阅读(157)  评论(0编辑  收藏  举报