PHP

来源:互联网 发布:计算机编程常用英语 编辑:程序博客网 时间:2024/05/16 09:18

属性

属性声明是由关键字public或者protected或者 private开头,然后跟一个变量来组成。 属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。

如果直接使用var声明属性,而没有publicprotected, 或 private,php 5 会认为这个属性为public

在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性、 方法,但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用self::$property





字符串

不像双引号 和heredoc语法结构, 在单引号字符串中的变量 和特殊含义的字符将 不会 被替换。

双引号

如果字符串是包围在双引号(")中, 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 进行定义

Note为了兼容性考虑,在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效(只是作为 public 关键字的一个别名)。在 PHP 5.1.3 之前的版本,该语法会产生一个 E_STRICT 警告。

对方法的访问控制

类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。



self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。

实现多个接口时,接口中的方法不能有重名。

重载

PHP所提供的"重载"(overloading)是指动态地"创建"类属性和方法。
当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
所有的重载方法都必须被声明为public
这些魔术方法的参数都不能 通过引用传递


5.3.0新增 __callStatic()魔术方法。 可见性未设置为public或未声明为static的时候会产生一个警告5.1.0新增 __isset() 和 __unset()两个魔术方法。

属性重载

public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )

在给未定义的变量赋值时,__set() 会被调用。

读取未定义的变量的值时,__get() 会被调用。

当对未定义的变量调用 isset() 或 empty()时,__isset() 会被调用。

当对未定义的变量调用 unset()时,__unset() 会被调用。

参数$name是指要操作的变量名称。__set() 方法的$value 参数指定了$name变量的值。

属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为static。 从PHP 5.3.0起, 将这些魔术方法定义为static会产生一个警告。


方法重载

public mixed __call ( string $name , array $arguments )
public static mixed __callStatic ( string $name , array $arguments )

当调用一个不可访问方法(如未定义,或者不可见)时,__call() 会被调用。

当在静态方法中调用一个不可访问方法(如未定义,或者不可见)时,__callStatic() 会被调用。

$name 参数是要调用的方法名称。$arguments 参数是一个数组,包含着要传递给方法$name 的参数。


对象迭代




命名空间

只有三种类型的代码受命名空间的影响,它们是:类,函数和常量
如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:
<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";}?>



PHP 中的所有变量都是以 $ 符号开始的。(PHP 的入门者往往会忘记在变量的前面的 $ 符号。如果那样做的话,变量将是无效的。




原创粉丝点击