PHP
来源:互联网 发布:计算机编程常用英语 编辑:程序博客网 时间:2024/05/16 09:18
属性
字符串
双引号
如果字符串是包围在双引号(")中, PHP将对一些特殊的字符进行解析:
Heredoc结构
第三种定义字符串的方法是用heredoc句法结构:<<<。在该提示符后面,要定义个标识符,然后是一个新行。接下来是字符串本身,最后要用前面定义的标识符作为结束标志。
Warning
Heredocs结构不能用来初始化class,而从PHP 5.3以后,则该限制只能用在包含变量的情况下。
在PHP 5.3.0以后,也可以用Heredoc结构来初始化静态变量和类的属性和常量:
Nowdoc结构
nowdoc不进行解析操作
一个nowdoc结构也用和heredocs结构一样的标记 <<<, 但是跟在后面的标志符要用单引号括起来,就像<<<'EOT'这样。heredocs结构的所有规则也同样适用于nowdoc结 构,尤其是结束标志符的规则。
Note:
不象 heredocs结构,nowdocs结构可以用在任意的静态数据环境中,最典型的示例是用来初始化类的属性或常量:
类与对象
访问控制
类成员都必须使用关键字public、protected 或 private 进行定义
E_STRICT
警告。对方法的访问控制
类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
重载
PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。属性重载
$name
, mixed $value
)$name
)$name
)$name
)在给未定义的变量赋值时,__set() 会被调用。
读取未定义的变量的值时,__get() 会被调用。
当对未定义的变量调用 isset() 或 empty()时,__isset() 会被调用。
当对未定义的变量调用 unset()时,__unset() 会被调用。
参数$name是指要操作的变量名称。__set() 方法的$value 参数指定了$name变量的值。
属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为static。 从PHP 5.3.0起, 将这些魔术方法定义为static会产生一个警告。
方法重载
$name
, array $arguments
)$name
, array $arguments
)当调用一个不可访问方法(如未定义,或者不可见)时,__call() 会被调用。
当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时,__callStatic() 会被调用。
$name 参数是要调用的方法名称。$arguments 参数是一个数组,包含着要传递给方法$name 的参数。
对象迭代
命名空间
<html><?phpnamespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句?>
与PHP其它的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。
在同一个文件中定义多个命名空间
也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。
<?phpnamespace MyProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }namespace AnotherProject;const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }?>
<?phpnamespace MyProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }}namespace AnotherProject {const CONNECT_OK = 1;class Connection { /* ... */ }function connect() { /* ... */ }}?>
全局的非命名空间
<?phpnamespace Foo;function strlen() {}const INI_ALL = 3;class Exception {}$a = \strlen('hi'); // 调用全局函数strlen$b = \INI_ALL; // 访问全局常量 INI_ALL$c = new \Exception('error'); // 实例化全局类 Exception?>
<?phpnamespace MyProject;use blah\blah as mine; // see "Using namespaces: importing/aliasing"blah\mine(); // calls function blah\blah\mine()namespace\blah\mine(); // calls function MyProject\blah\mine()namespace\func(); // calls function MyProject\func()namespace\sub\func(); // calls function MyProject\sub\func()namespace\cname::method(); // calls static method "method" of class MyProject\cname$a = new namespace\sub\cname(); // instantiates object of class MyProject\sub\cname$b = namespace\CONSTANT; // assigns value of constant MyProject\CONSTANT to $b?>
<?phpnamespace A\B\C;class Exception extends \Exception {}$a = new Exception('hi'); // $a 是类 A\B\C\Exception 的一个对象$b = new \Exception('hi'); // $b 是类 Exception 的一个对象$c = new ArrayObject; // 致命错误, 找不到 A\B\C\ArrayObject 类?>
<?phpnamespace A\B\C;const E_ERROR = 45;function strlen($str){ return \strlen($str) - 1;}echo E_ERROR, "\n"; // 输出 "45"echo INI_ALL, "\n"; // 输出 "7" - 使用全局常量 INI_ALLecho strlen('hi'), "\n"; // 输出 "1"if (is_array('hi')) { // 输出 "is not array" echo "is array\n";} else { echo "is not array\n";}?>