com doc/zh: sync with en. fix #80651: language/oop5/static.xml
[email protected] (CHU Zhaowei) Mon, 01 Feb 2021 08:29:48 +0000
| Newsgroups | php.doc.zh |
|---|---|
| Message-ID | <[email protected]> |
Commit: abd61b44f3ed40f4f840a70a2abe2af9ef6209fe Author: CHU Zhaowei <[email protected]> Mon, 1 Feb 2021 16:29:48 +0800 Parents: 2590ef8415400ad06c3c7c6d81e6fc7562b30333 Branches: master Link: http://git.php.net/?p=doc/zh.git;a=commitdiff;h=abd61b44f3ed40f4f840a70a2abe2af9ef6209fe Log: sync with en. fix #80651 Bugs: https://bugs.php.net/80651 Changed paths: M language/oop5/static.xml Diff: diff --git a/language/oop5/static.xml b/language/oop5/static.xml index 7051f210..89a3ba50 100644 --- a/language/oop5/static.xml +++ b/language/oop5/static.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <!-- $Author$ --> -<!-- EN-Revision: 4d6ac2f94061c885ebabd9b2a3e0f872131ddb85 Maintainer: Haohappy Status: ready --> +<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: jhdxr Status: ready --> <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook"> - <title>Static(静态)关键字</title> + <title>静态(static)关键字</title> <tip> <simpara> @@ -18,36 +18,64 @@ 声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。 </para> - <para> - 为了兼容 PHP 4,如果没有指定<link - linkend="language.oop5.visibility">访问控制</link>,属性和方法默认为公有。 - </para> + <sect2 xml:id="language.oop5.static.methods"> + <title>静态方法</title> - <para> + <para> 由于静态方法不需要通过对象即可调用,所以伪变量 <varname>$this</varname> 在静态方法中不可用。 </para> - - <para> - 静态属性不可以由对象通过 -> 操作符来访问。 - </para> - - <para> - 用静态方式调用一个非静态方法会导致一个 <constant>E_STRICT</constant> 级别的错误。 - </para> - <para> - 就像其它所有的 PHP - 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象。 - </para> - - <para> - 自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字 - <literal>self</literal>,<literal>parent</literal> 或 <literal>static</literal>。 - </para> + <warning> + <para> + 用静态方式调用一个非静态方法会抛出 <classname>Error</classname>。 + </para> + <para> + 在 PHP 8.0.0 之前,通过静态方式调用一个非静态方法这种用法已经被废弃,并且会导致一个 + <constant>E_DEPRECATED</constant> 级别的警告。 + </para> + </warning> <example> - <title>静态属性示例</title> - <programlisting role="php"> + <title>静态方法示例</title> + <programlisting role="php"> +<![CDATA[ +<?php +class Foo { + public static function aStaticMethod() { + // ... + } +} + +Foo::aStaticMethod(); +$classname = 'Foo'; +$classname::aStaticMethod(); +?> +]]> + </programlisting> + </example> + </sect2> + + <sect2 xml:id="language.oop5.static.properties"> + <title>静态属性</title> + + <para> + 静态属性不可以由对象通过 -> 操作符来访问。 + </para> + + <para> + 就像其它所有的 PHP 静态变量一样,静态属性在初始化时遵循和 &const; 表达式一样的规则: + 有一些特定的表达式是可行的,取决于它们是否能在编译时就计算出值。 + </para> + + <para> + 通过变量来引用一个类是可行的,但这个变量的值不能是一个保留字 + (例如<literal>self</literal>,<literal>parent</literal>和 + <literal>static</literal>) + </para> + + <example> + <title>静态属性示例</title> + <programlisting role="php"> <![CDATA[ <?php class Foo @@ -71,40 +99,21 @@ print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; -print $foo->my_static . "\n"; // Undefined "Property" my_static +print $foo->my_static . "\n"; // 未定义的 "属性" my_static print $foo::$my_static . "\n"; $classname = 'Foo'; -print $classname::$my_static . "\n"; // As of PHP 5.3.0 +print $classname::$my_static . "\n"; print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?> - </programlisting> - </example> - - <example> - <title>静态方法示例</title> - <programlisting role="php"> -<![CDATA[ -<?php -class Foo { - public static function aStaticMethod() { - // ... - } -} - -Foo::aStaticMethod(); -$classname = 'Foo'; -$classname::aStaticMethod(); // 自 PHP 5.3.0 起 -?> ]]> </programlisting> - </example> - + </example> + </sect2> </sect1> - <!-- Keep this comment at the end of the file Local variables: mode: sgml