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>   
-   静态属性不可以由对象通过 -&gt; 操作符来访问。
-  </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>
+    静态属性不可以由对象通过 -&gt; 操作符来访问。
+   </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