`
957803796_1
  • 浏览: 124058 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

PHP精华

 
阅读更多

empty 认为0为空
判断含0的值不为空要用
if($a!="") {

PHP版本

echo phpversion();

$_REQUEST

HTTP请求有POST和GET。在写表单form时可以指定action为post或get。数组$_POST中保存POST方法传递的变量, $_GET保存GET方法传递的变量。$_REQUEST中包含二者。例如 <form action="t.php" action="get"><input type="text" name="aaa"></form>在t.php中,可以使用$_GET['aaa']获得网页表单中填写的数据.当form中的action为get时使用$_GET;action为post时用$_POST。二者都可用 $_REQUEST

array_push()

<?php$a=array("a"=>"Dog","b"=>"Cat");array_push($a,"Horse","Bird");print_r($a);?>

Array ( [a] => Dog [b] => Cat [0] => Horse [1] => Bird )

注释:即使数组中有字符串键名,您添加的元素也始终是数字键

保留小数

$a=112222123;
echo number_format($a,2);
echo ("</br>");
echo(round($a, 2));
echo ("</br>");
echo sprintf("%.2f", $a);


$a=112222123;
echo number_format($a,2);
echo ("</br>");
echo(round($a, 2));
echo ("</br>");
echo sprintf("%.2f", $a);$a=112222123;
echo number_format($a,2);
echo ("</br>");
echo(round($a, 2));
echo ("</br>");
echo sprintf("%.2f", $a);

empty
如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,”"、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。

isset
如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。

is_null
检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】
三者区别 http://blog.csdn.net/21aspnet/article/details/7592183.

“<td>”.$a."</td>" =“<td>{$a}</td>"

配置

display_errors
//ini_set("display_errors","On"); //显示所有错误信息*/
ini_set("display_errors","Off"); //屏蔽所有错误信息
通常服务器配置文件中,是屏蔽notice错误,只显示error错误,如果是这样的话,你打开错误显示,也不会显示notice错误

利用ini_set可以快速的修改php.ini配置设置哦,无需打开php.ini就可以了,特别是虚拟主机时你没有修改php.ini的权限时就会发现这个函数的作用了,下面看几个实例吧。
*/
//ini_set具有更改php.ini设置的功能。此函数接收两个参数:需要调整的配置变量名,以及变量的新值。


error_reporting()

设置 PHP 的报错级别并返回当前级别。


//禁用错误报告 error_reporting(0); //报告运行时错误 error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告所有错误 error_reporting(E_ALL);


output_buffering

默认是4096

;output_buffering = 4096
output_buffering = Off

这样出现echo在header之前就会报错“Warning: Cannot modify header information - headers already sent by (output started at xxx.php

所以php开启缓冲2种方法:

1.页面ob_start()

2.或者php.ini修改配置

--------------------------------------

output缓存--->程序缓存(不能控制)->输出->IE缓存(256字节)

Output Control 函数

  • flush— 刷新输出Apache的缓冲
  • ob_clean— 清空(擦掉)输出缓冲区
  • ob_end_clean— 清空(擦除)缓冲区并关闭输出缓冲
  • ob_end_flush— 冲刷出(送出)输出缓冲区内容并关闭缓冲
  • ob_flush先输出PHP的ob缓冲区中的内容,再清空缓冲区。如果以后调用ob_get_contents只能得到flush之后进入缓冲区的内容
  • ob_get_clean— 得到当前缓冲区的内容并删除当前输出缓。
  • ob_get_contents— 返回输出缓冲区的内容
  • ob_get_flush— 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
  • ob_get_length— 返回输出缓冲区内容的长度
  • ob_get_level— 返回输出缓冲机制的嵌套级别
  • ob_get_status— 得到所有输出缓冲区的状态
  • ob_gzhandler— 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数。ob_start callback function to gzip output buffer
  • ob_implicit_flush— 打开/关闭绝对刷送
  • ob_list_handlers— 列出所有使用中的输出处理程序。
  • ob_start— 打开输出控制缓冲 ob不缓存header
  • output_add_rewrite_var— 添加URL重写器的值(Add URL rewriter values)
  • output_reset_rewrite_vars— 重设URL重写器的值(Reset URL rewriter values)
$contents=ob_get_contents();
file_put_contents("log.txt",$contents);

深入理解ob_flush和flush的区别

http://www.laruence.com/2010/04/15/1414.html


-----------------------------------

文件操作

file_exists() 函数检查文件或目录是否存在

file_get_contents()得到文件

file_put_contents()生成文件

----------------------------------

正则表达式

preg_match

preg_match 匹配到一次就会停止,设置匹配到的一个匹配

preg_match_all

preg_match_all() 返回的是所有匹配的数组
------------------------------------------------

防盗链

if(isset($_SERVER['HTTP_REFERER']){
if(strpos($_SERVER['HTTP_REFERER',"http://localhost/"==0){
}
}

-----------------------------------

ping的通却不能远程解析URL试试wget

HTTP request sent, awaiting response... 403 Forbidden
10:58:22 ERROR 403: Forbidden.

break和continue

break结束当前for,foreach,while,do..while 或者 switch 结构的执行。
break 可以接受一个可选的数字参数来决定跳出几重循环。


continue 在循环结构用用来跳过本次循环中剩余的代码并开始执行本循环结构的下一次循环。
注意在 PHP 中 switch 语句被认为是作为 continue 目的的循环结构。
continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。

输出1像素细的表格

if(!empty($datas)){
echo "<table border=\"0\" cellpadding=\"1\" cellspacing=\"1\" bgcolor=\"#58CB64\"><tr><td width=\"100\" bgcolor=\"#FFFFFF\">id</td><td width=\"200\" bgcolor=\"#FFFFFF\">时间</td></tr>";
foreach($events as $event){
echo "<tr><td bgcolor=\"#FFFFFF\">".$datas['Id']."</td><td bgcolor=\"#FFFFFF\">".$datas['inTime']."</td></tr>";
}
echo "</table>";
}
----------------------------------

调试

通过set_error_handler来捕获线上运行错误,统一收集日志、报警
通过register_shutdown_function来捕获fatal errors、记录运行时间

Xdebug、xhprof

$start=microtime(true);

///

$cost=microtime(true)-$start

----------------------------------

1.PHP和JS交互

  1. <?php
  2. $a=1;
  3. ?>
  4. <scripttype="text/javascript">
  5. vara=<?=$a?>;
  6. alert(a);
  7. </script>

拼凑HTML

<? if(1==1):?>
<div id='search'></div>
<?endif?>


2.PHP字符串技巧

  1. <?php
  2. $str="Hello";
  3. $number=123;
  4. $txt=sprintf("%sworld.Daynumber%u",$str,$number);
  5. echo$txt;
  6. ?>


输出:Hello world. Day number 123

单引号和双引号

单引号: ’a string’
不能内嵌变量, \’是唯一的转义码
双引号: ”a $better string\n”
可内嵌变量, 标准的转义码能正常使用
“Here-doc” 语法:
$foo = <<<END

END;
对于多行的大文本或html非常有用
支持内嵌变量
注意: 以<<<END开头,后面另起新行
END; 占用一行,不能有空格

重复输出
str_repeat("A",5);

字符串连接小技巧

逗号,也可以和点号.一样连接字符串,同时性能上逗号还好一些,但是非常有限。

字符串保护变量的时候使用双引号。

substr() 函数返回字符串的一部分

substr(string,start,length)

  1. <?php
  2. echosubstr("Helloworld!",6);
  3. ?>


输出:world!

strpos() 和strrpos()

strpos() 返回字符串在另一字符串中首次出现的位置【对大小写敏感】

stripos() 返回字符串在另一字符串中首次出现的位置【对大小写不敏感】

strrpos() 返回字符串在另一字符串中最后出现的位置【对大小写敏感】

strripos() 返回字符串在另一字符串中最后出现的位置【对大小写不敏感】

如果成功,则返回位置,否则返回 false。

  1. <?php
  2. echostrpos("Helloworld!","wo");
  3. ?>

输出:6

PHP界定符
<<<eot 和eot是界定符,他们之间的内容php将会识别为一段大的字符串,相当于""。

  1. <?php
  2. $a=1;
  3. echo<<<eot
  4. <scriptlanguage="JavaScript"type="text/JavaScript">
  5. vara=$a;
  6. alert(a);
  7. </script>
  8. eot;
  9. ?>


addslashes() 函数

在指定的预定义字符前添加反斜杠。防sql注入

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL字符)。

$str = "Is \your name O'reilly?";
// 输出:Is \\your name O\'reilly?

echo addslashes($str);

使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里。这种方法把存储空间降到了接近四分之一(char(15) 的 15 个字节对整形的 4 个字节),计算一个特定的地址是不是在一个区段内页更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点)。

  1. <p>$ip=gethostbyname('www.baidu.com');
  2. $long=ip2long($ip);</p><p>if($long==-1||$long===FALSE){
  3. echo'InvalidIP,pleasetryagain';
  4. }else{
  5. echo$ip."</br>";//192.0.34.166
  6. echo$long."</br>";//-1073732954
  7. printf("%u</br>",ip2long($ip));//3221234342
  8. }
  9. ?></p>
  1. 在验证email地址的时候使用checkdnsrr()函数验证域名是否存在。这个内置函数能够确认指定的域名能够解析成IP地址。该函数的PHP文档的用户评论部分有一个简单的用户自定义函数,这个函数基于checkdnsrr(),用来验证email地址的合法性。
strcmp() 函数比较两个字符串。
0 - 如果两个字符串相等;<0 - 如果 string1 小于 string2;>0 - 如果 string1 大于 string2

htmlspecialchars() 把一些预定义的字符转换为 HTML 实体

intval

本函数可将变量转成整数类型。可省略的参数 base 是转换的基底,默认值为 10。转换的变量 var 可以为数组或类之外的任何类型变量。

  1. <spanstyle="BACKGROUND-COLOR:#ffffff"><?php
  2. echointval(42);//42
  3. echointval(4.2);//4
  4. echointval('42');//42
  5. echointval('+42');//42
  6. echointval('-42');//-42
  7. echointval(042);//34
  8. echointval('042');//42
  9. echointval(1e10);//1410065408
  10. echointval('1e10');//1
  11. echointval(0x1A);//26
  12. echointval(42000000);//42000000
  13. echointval(420000000000000000000);//0
  14. echointval('420000000000000000000');//2147483647
  15. echointval(42,8);//42
  16. echointval('42',8);//34
  17. echointval(array());//0
  18. echointval(array('foo','bar'));//1
  19. ?>
  20. </span>

3.PHP数组技巧

http://www.cnblogs.com/kym/archive/2010/03/04/1678726.html

PHP默认就是不定长数组,php中的数组,是数组(array),是队列(queue),是堆栈(stack),也是哈希(hash table),还是向量(vector)。

$arr[1]=123;
$arr['b']=124;

print_r($arr);

$a="abc";
echo $a[1];

  1. <html>
  2. <head>
  3. <title>测试</title>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  5. </head>
  6. <body>
  7. <?php
  8. $a=array('aa','bb','cc');
  9. $a[3]="dd";
  10. for($i=0;$i<4;$i++)
  11. {
  12. echo$a[$i]."</br>";
  13. }
  14. $b=array('a'=>0,'b'=>1,'c'=>2);
  15. echo$b['a']."</br>";
  16. foreach($bas$key=>$value)
  17. {
  18. echo$key."-".$value."</br>";
  19. }
  20. //each()函数生成一个由数组当前内部指针所指向的元素的键名和键值组成的数组,并把内部指针向前移动。
  21. //返回的数组中包括的四个元素:键名为0,1,key和value。单元0和key包含有数组单元的键名,1和value包含有数据。
  22. //如果内部指针越过了数组范围,本函数将返回FALSE。
  23. //注释:list()函数只用于数字索引的数组,且假定数字索引从0开始。
  24. while(list($c1,$c2,$c3)=each($a))
  25. {
  26. echo"$c1-$c2-$c3</br>";
  27. }
  28. ?>
  29. </body></html>


输出:

aa
bb
cc
dd
0
a-0
b-1
c-2
0-aa-
1-bb-
2-cc-
3-dd-

说明:对于foreach其实 用$key=>$value和$i => $g 是效果一样的,并不仅限于key value

  1. <?php
  2. echo"<br/>\n";
  3. $arr=array("one","two","three");
  4. foreach($arras$i=>$g){
  5. echo"Key:$i;Value:$g<br/>\n";
  6. }
  7. ?>
reset() 函数

reset() 函数把数组的内部指针指向第一个元素,并返回这个元素的值。

  1. <?php
  2. $people=array("Peter","Joe","Glenn","Cleveland");
  3. echocurrent($people)."<br/>";
  4. echonext($people)."<br/>";
  5. echoreset($people);
  6. ?>


输出:
Peter
Joe
Peter

array_fill()函数

用给定的值填充数组

  1. <?php
  2. $a=array_fill(5,6,'banana');
  3. print_r($a);
  4. ?>


输出:

Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )

4.打印数组(PHP模式和JSON模式)

  1. $data=array(
  2. 'firstname'=>'Tom',
  3. 'lastname'=>'Smith',
  4. 'age'=>40
  5. );
  6. print_r($data);
  7. echojson_encode($data);

输出:

Array ( [firstname] => Tom [lastname] => Smith [age] => 40 )

{"firstname":"Tom","lastname":"Smith","age":40}

说明:print_r($data,true);这样才可以把数组写到日志

$a = array ("a", "b", "c");
$c= print_r($a,true);

$logfile = "t.txt";

error_log("{$c}\r\n\r\n",3,$logfile);

  1. <?php
  2. $hello=array('1','2','3');
  3. $helloJson=json_encode($hello);
  4. echo$helloJson;
  5. ?>


输出:["1","2","3"]

说明:如果是一维数组json后是[],二维是{}

implode() 函数

implode() 函数把数组元素组合为一个字符串。

  1. <?php
  2. $arr=array('Hello','World!','Beautiful','Day!');
  3. echoimplode("",$arr);
  4. ?>


输出:

Hello World! Beautiful Day!

join() 函数是 implode() 函数的别名。

var_dump()

$a = array ("a", "b", "c");
var_dump ($a);
echo "<br>";
print_r($a);
echo "<br>";

输出:

array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
Array ( [0] => a [1] => b [2] => c )


5.判断是否数组

if(is_array($ac))

6.类与引用

  1. classcommon
  2. {
  3. public$Name=3;
  4. publicfunctionshow()
  5. {
  6. echo($this->Name);
  7. }
  8. }
  9. $am=newcommon();
  10. $am->show();


注意是$this->Name 不是$this->$Name

7.静态变量(不同于C#,java等的全局变量)

  1. classcommon
  2. {
  3. publicfunctionshow()
  4. {
  5. static$ap=1;
  6. $ap*=2;
  7. echo$ap;
  8. }
  9. }
  10. $am=newcommon();
  11. $am->show();
  12. $am->show();

输出:2 4


8.函数中的静态成员

  1. classcommon
  2. {
  3. publicstatic$ap=1;
  4. publicfunctionshow()
  5. {
  6. self::$ap*=2;
  7. echoself::$ap;
  8. }
  9. }
  10. $am=newcommon();
  11. $am->show();

和$this不同,静态变量引用必须加$

  1. classMyObject
  2. {
  3. publicstatic$myVar=0;
  4. functionmyMethod()
  5. {
  6. self::$myVar+=2;
  7. echoself::$myVar."/n";
  8. }
  9. }
  10. classMyOtherObjectextendsMyObject
  11. {
  12. functionmyMethod()
  13. {
  14. echo"基类myMethod被重写";
  15. }
  16. functionmyOtherMethod()
  17. {
  18. echo"myExtendsedMethod"."/n";
  19. self::myMethod();//在扩展类中使用self作用域时,self可以调用基类中声明的方法,但它调用的总是已经在扩展类中重写的方法.
  20. parent::myMethod();//如果基类的方法被重写的情况下,你希望调用定义在基类的方法,可以使用parent作用域.
  21. parent::myMethod();//静态成员
  22. }
  23. }
  24. MyOtherObject::myOtherMethod();

9.常量

http://www.php.net/manual/zh/language.constants.php

//合法的常量名
define("FOO","something");

//使用

echo FOO

10.文件路径

dirname(__FILE__);//当前文件所在文件夹

dirname(dirname(__FILE__));//当前文件所在文件夹的上一层文件夹,这样如果是和当前路径平行的目录可以直接后面加上即可,如果是更上面的需要再网上回溯。

11.引入文件

require_once(dirname(__FILE__).文件名);//引入当前目录的某文件


12.执行远程文件

echo file_get_contents("http://www.baidu.com");

13.error_log记日志

$logfile = "/www/ws.txt";
$dd = '时间'.date("Y-m-d H:i:s").'| 来源:'.$_SERVER['HTTP_REFERER'].'| IP:'.$_SERVER['REMOTE_ADDR'].'|主机名:'.$_SERVER['REMOTE_HOST'] ;
error_log("{$dd}\r\n\r\n",3,$logfile);

14.常用时间


echo date('Ymd');
echo date("[Y-m-d H:i:s]");

php拆分日期时间,因为日期的长度是固定的,所以可直接用substr来做

echo substr(date("Y-m-d H:i:s"),0,10);//日期

echo substr(date("Y-m-d H:i:s"),10);//时间

unix时间戳和当前时差几天

select datediff(now(),FROM_UNIXTIME(1328803108))

15.sprintf() 函数

把格式化的字符串写写入一个变量中。

$str = "Hello";$number = 123;$txt =sprintf("%s world. Day number %u",$str,$number);

16.isset()函数

isset()函数一般用来检测变量是否设置,使用 unset() 释放变量之后,它将不再是 isset()。

empty()函数 判断值为否为空


17.class_exists陷阱

if(class_exists("类名"));

如果由class_name所指的类已经定义,此函数返回TRUE,否则返回FALSE

只要代码中有就是True,而不是new一个

18.implementsInterface

//如果该类实现 了IController接口
if($rc->implementsInterface('接口名'))

19.ReflectionClass

//利用反射api构造一个控制器类对应的反射类
$rc = new ReflectionClass(‘类名’);

20.hasMethod

//该类拥有解析后的action字符串所指向的方法名
if($rc->hasMethod('方法名'))

21.newInstance

//构造一个控制器类的实例
$controller = $rc->newInstance();

22.getMethod

获取该类$action参数所指向的方法对象
$method = $rc->getMethod('方法');

23.isStatic

//如果方法是静态的
if($rc->isStatic())

24.invoke

PHP5.3新增了一个叫做__invoke的魔术方法,这样在创建实例后,可以直接调用对象.使用反射api 来调用一个方法.

注意静态和非静态不同

if($plugin->hasMethod('getMenuItems')) {
/*实例化一个方法实例(注意当你将类和方法看成概念时,它们就可以有实例,
就像“人”这个概念一样),该方法返回的是ReflectionMethod 的实例*/
$reflectionMethod = $plugin->getMethod('getMenuItems');
//如果方法是静态的
if($reflectionMethod->isStatic()) {
//调用静态方法,注意参数是null 而不是一个反射类实例
$items = $reflectionMethod->invoke(null);
} else {
//如果方法不是静态的,则先实例化一个反射类实例所代表的类的实例。
$pluginInstance = $plugin->newInstance();
//使用反射api 来调用一个方法,参数是通过反射实例化的对象引用
$items = $reflectionMethod->invoke($pluginInstance);
}

25.explode()

可以讲字符串打散为数组的格式

explode(separator,string,limit)

参数分析:
separator:指定以什么字符来打散
string: 需要被打散的字符串
limit: 限制被打散的数组元素最多为多少个

26.chunk_split()

chunk_split() 函数能够把字符串分割为一块一块的更小的字符串块。
下面写了一个可以分割中文字符串的函数。

/**
* 分割字符串
* @param String $str 要分割的字符串
* @param int $length 指定的长度
* @param String $end 在分割后的字符串块追加的内容
* @param String $charset 字符编码,默认为utf-8
*/
function mb_chunk_split($str,$length, $end, $charset='utf-8')
{
if (empty($str)) return false;
if ( $charset != 'utf-8' ) $length = $length*2;
return chunk_split($str, $length, $end);
}


$str = '六一马上就要到了';
$str1 = 'aabbccddeefff';
echo mb_chunk_split($str, 2, '...', 'gb2312'); // 六一...马上...就要...到了...
echo mb_chunk_split($str1, 2, '...'); // aa...bb...cc...dd...ee...ff...f...

$str = 'one|two|three|four';
print_r(explode('|', $str, 2)); // Array( [0] => one [1] => two|three|four)

print_r(explode('|', $str, -1)); // Array( [0] => one [1] => two [2] => three)

时间

27.microtime() 函数

microtime() 函数返回当前 Unix 时间戳和微秒数。

如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。

echo(microtime());

0.32491200 1321251369

PHP中date()函数与Oracle的to_date()和to_char()的使用

在Oracle中的日期类型为DATE,无法和字符串直接进行匹配,需要转化,或者把字符串通过to_date()转化为日期格式进行比较,或者使 用to_char

('column_name','yyyy-mm-dd')等方法转化为字符串后进行比较。就获得正确的记录了。

to_date( '".$params['ORDER_TIME']."','YYYY-MM-DD')
TO_DATE(:BEGIN_DATE,'yyyy-mm-dd hh24:mi:ss')

当前时间

to_date('".date('Y-m-d H:i:s')."','yyyy-mm-dd hh24:mi:ss')

28.die()函数

die() 函数输出一条消息,并退出当前脚本。


将类传给函数是引用

<?php
class per{
public $name;
}
$a=new per();
$a->name="AAA";


function t($a)
{
$a->name="CCC";
}
t($a);
echo $a->name;
?>

输出:CCC


析构函数

__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.
析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.

<?php
class per{
public $name;
function __destruct(){
echo $this->name."销毁资源<br/>";
}
}


$a=new per();
$a->name="AAA";
$b=new per();
$b->name="CCC";
?>

输出:

CCC销毁资源
AAA销毁资源

因为栈是先入后出$a先入,$b后入

析构方法小结:

php5加入析构方法function __destruct()

析构方法没有返回值

一个类最多一个析构方法

析构方法会自动调用

析构方法自身主要用于销毁资源,而并不消耗对象,在销毁对象前,系统自动的调用该类的析构方法

析构方法调用顺序是先创建的对象后被销毁!

析构方法什么时候被调用?

当程序进程结束退出时;

当一个对象成为垃圾对象的时候,该对象的析构方法也会被调用;

所谓垃圾对象,就是指没有任何变量再引用它

一旦一个对象成为垃圾对象,析构方法就会立即调用!(C#和java不会立即)



php垃圾回收器

在php中,当一个对象没有任何引用指向它的时候,就会成为一个垃圾对象,php将启用垃圾回收器将对象销毁,从而回收该对象占用的内存

当程序退出前,php也将启用垃圾回收器,销毁对象


<?php
class per{
public $name;
function __destruct(){
echo $this->name."销毁资源<br/>";
}
}


$a=new per();
$a->name="AAA";
//$d=$a;
$a=null;
$b=new per();
$b->name="BBB";
$c=new per();
$c->name="CCC";
?>

输出:

AAA销毁资源
CCC销毁资源
BBB销毁资源


看出差异

<?php
class per{
public $name;
function __destruct(){
echo $this->name."销毁资源<br/>";
}
}


$a=new per();
$a->name="AAA";
$d=$a;
$a=null;
$b=new per();
$b->name="BBB";
$c=new per();
$c->name="CCC";
?>

输出:

CCC销毁资源
BBB销毁资源
AAA销毁资源


构造函数

构造函数对对象的引用是$this-> 而不可直接赋值!

class per{
public $name;

public function __construct($iname)

{

$this->name=$iname;

//$name=$iname;//这样会认为是一个新的对象!

}

系统会给每个对象分配this,this代表当前对象的地址,谁调用代表谁,那个对象使用到$this就是那个对象地址,this在代码区

this不能在类定义的外部使用,只能在类定义的方法中使用

php4构造方法和类同名,php5也可以__construct

构造方法没有返回值,主要作用是完成对象初始化,并不创建对象本身

在创建新对象以后,系统自动调用该类的构造方法

一个类只能有一个构造方法,自定义构造方法会覆盖默认的构造方法

构造函数默认修饰符是public

分享到:
评论

相关推荐

    PHP程序员易忽略的PHP精华和技巧

    标题中的“PHP程序员易忽略的PHP精华和技巧”暗示了本文将探讨PHP编程中的一些重要但可能被忽视的特性。描述中的“总结很精辟值得PHP开发人员一看”表明内容会是深入且实用的,适合PHP开发者提升技能。 首先,我们...

    PHP精华文摘 CHM

    《PHP精华文摘 CHM》是一部专注于PHP编程语言的精华资料集合,旨在为开发者提供全面、深入的PHP学习和实践指导。CHM(Compiled Help Manual)格式是一种常见的电子手册格式,通常包含丰富的文本、代码示例和索引,...

    PHP精华文摘(CHM)

    【PHP精华文摘(CHM)】是一份专为PHP开发者准备的综合性学习资源,它以CHM(Compiled HTML Help)格式呈现,这种格式是微软开发的一种帮助文档格式,集成了索引、搜索等功能,便于用户快速查找和学习PHP的相关知识。...

    PHP精华文摘(CHM) 最新版下载

    《PHP精华文摘》是一款专为PHP开发者设计的资源合集,它以CHM(Microsoft Compiled HTML Help)格式提供,方便用户快速查阅和学习PHP相关的技术知识。此最新版的下载资源包含了丰富的PHP编程技巧、最佳实践、常见...

    PHP精华文摘(强烈推荐)

    《PHP精华文摘》是一本全面且深入的PHP学习资源,涵盖了从基础概念到高级技巧的广泛内容。作为一门广泛应用于Web开发的脚本语言,PHP的掌握对于任何想要在互联网领域有所建树的开发者来说都至关重要。这篇文摘不仅...

    PHP精华文摘集锦入门或进阶的首选

    PHP精华文摘.chm文件很可能包含了以下内容: 1. **基础语法**:讲解PHP的基本语法规则,包括变量声明、数据类型、运算符、流程控制结构(如if-else、for、while循环)等。 2. **函数库**:介绍PHP内置的大量函数,...

    PHP精华文摘.rar

    《PHP精华文摘》是一个包含了丰富PHP编程知识的压缩包,其主要标签为"PHP教程",这表明其中的内容可能涵盖了从基础到高级的各种PHP编程技术。以下将根据这个主题,详细阐述PHP语言的一些核心概念、重要特性以及常用...

    PHP精华文摘(CHM).rar

    【PHP精华文摘(CHM).rar】是一个包含PHP核心概念、技术细节和实践应用的压缩文件,主要针对希望深入理解并提升PHP编程技能的开发者。CHM(Microsoft Compiled HTML Help)格式是一种常见的电子文档格式,它将HTML...

    PHP 精华文摘 ----提供php初学者常见问题及解决

    在PHP编程领域,初学者经常会遇到各种挑战,这个“PHP精华文摘”旨在为这些问题提供解答和解决方案。文摘中的内容可能涵盖了基础语法、错误处理、函数应用、数据库交互、面向对象编程等多个方面,这对于想要深入理解...

    PHP精华文摘

    《PHP精华文摘》是一个包含了多篇PHP技术文章的CHM格式文档,旨在为开发者提供丰富的PHP编程知识和实践经验。CHM(Compiled HTML Help)是微软推出的一种帮助文档格式,它将HTML页面编译成一个单一的文件,方便用户...

    PHP精华教程

    【PHP 精华教程】 PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛应用于Web开发的开源服务器端脚本语言。它的设计目标是让开发者能够快速地编写动态网页。PHP 文件可以像普通的HTML文件一样编写,其中...

    php精华文章

    php精华文章 php精华文章

    PHP精华笔记

    【PHP精华笔记】这篇笔记主要涵盖了PHP编程语言的基础知识点,包括运算符、流程控制、函数、作用域、数据类型转换等内容。 首先,我们来看运算符。PHP中的运算符分为多种,如算术运算符(+,-,*,/,%),逻辑...

    PHP精华文档

    《PHP精华文档》是一部汇聚了PHP编程领域众多经典文章的集合,以`.chm`(Microsoft HTML Help)格式呈现,这种格式便于用户离线查阅,同时也整合了索引和搜索功能,使得学习和查找PHP相关知识更为便捷。文档涵盖了从...

    php精华文摘

    php精华文摘.chm

Global site tag (gtag.js) - Google Analytics