PHP 编程中 @ 符号的作用

在编程过程中我们经常会遇到@这个符号,例如(C#)中:通常在路径字符串中我们会使用@表示强制不转义。@"C:\Program Files\TTPlayer\TTPlayer.exe "

在PHP编程中我们也经常会看到@符号,之前也很少关注这个符号,只知道是屏蔽错误的。例如下列的代码中,明明程序的结果都出来了,但是还出现这样的warning,这并不是 php 版本问题,而是 php 配置问题。

一般是由于PHP版升级的原因,PHP 5.4 以上的版本一般会报这个错误。

1
2
3
4
5
Warning: Creating default object from empty value in D:\work\cmisTEST\Alfresco_CMIS_API.php on line 441
Warning: Creating default object from empty value in D:\work\cmisTEST\Alfresco_CMIS_API.php on line 442
Warning: Creating default object from empty value in D:\work\cmisTEST\Alfresco_CMIS_API.php on line 443
Warning: Creating default object from empty value in D:\work\cmisTEST\Alfresco_CMIS_API.php on line 444
==================================== Contained objects: Data Dictionary (cmis:document) Guest Home (cmis:document) User Homes (cmis:document) Imap Attachments (cmis:document) Sites (cmis:document) DemoFolder (cmis:document) ACCT (cmis:document) dev (cmis:document) 1508725606009.jpg (cmis:document) 1508725628733.jpg (cmis:document) 1508725869696.jpg (cmis:document) USER (cmis:document) 测试文本.txt (cmis:document)

只需要修改php程序即可,如下:

1
2
3
4
@$this->containedObjects[$x]->objUrl=(string)$objUrl;
@$this->containedObjects[$x]->author=(string)$ent->author->name;
@$this->containedObjects[$x]->title=(string)$ent->title;
@$this->containedObjects[$x]->type=$objType;

或者在修改php.ini文件,或是在程序顶部增加ini_set( 'display_errors', 'off' );代码块即可。

总结

@是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。