com php-langspec: Fix clone precedence: spec/00-specification-for-php.md spec/10-expressions.md spec/19-grammar.md
[email protected] (Nikita Popov) Tue, 19 Sep 2017 07:56:14 +0000
| Newsgroups | php.standards.cvs |
|---|---|
| Message-ID | <[email protected]> |
Commit: 4581ccd4a9d4909b9983675a41613dd388a01733=0AAuthor: Nikita Pop= ov <[email protected]> Tue, 19 Sep 2017 09:56:14 +0200=0AParents: 733= 810097e09bc718c8ad7a8dcd6de3a47659f72=0ABranches: master=0A=0ALink: = http://git.php.net/?p=3Dphp-langspec.git;a=3Dcommitdiff;h=3D4581ccd4a9d4909= b9983675a41613dd388a01733=0A=0ALog:=0AFix clone precedence=0A=0AChanged pat= hs:=0A M spec/00-specification-for-php.md=0A M spec/10-expressions.md= =0A M spec/19-grammar.md=0A=0A=0ADiff:=0Adiff --git a/spec/00-specificati= on-for-php.md b/spec/00-specification-for-php.md=0Aindex cccc3b8..64df695 1= 00644=0A--- a/spec/00-specification-for-php.md=0A+++ b/spec/00-specificatio= n-for-php.md=0A@@ -116,7 +116,6 @@ is distributed without any warranty.=0A = - [Anonymous Function Creation](10-expressions.md#anonymous-function-cr= eation)=0A - [Postfix Operators](10-expressions.md#postfix-operators)=0A = - [General](10-expressions.md#general-3)=0A- - [The `clone` Operator= ](10-expressions.md#the-clone-operator)=0A - [The `new` Operator](10-ex= pressions.md#the-new-operator)=0A - [Array Creation Operator](10-expres= sions.md#array-creation-operator)=0A - [Subscript Operator](10-expressi= ons.md#subscript-operator)=0A@@ -125,6 +124,7 @@ is distributed without any= warranty.=0A - [Member Call Operator](10-expressions.md#member-call-op= erator)=0A - [Postfix Increment and Decrement Operators](10-expressions= .md#postfix-increment-and-decrement-operators)=0A - [Scope-Resolution O= perator](10-expressions.md#scope-resolution-operator)=0A+ - [The `clone` O= perator](10-expressions.md#the-clone-operator)=0A - [Exponentiation Opera= tor](10-expressions.md#exponentiation-operator)=0A - [Unary Operators](10= -expressions.md#unary-operators)=0A - [General](10-expressions.md#gener= al-4)=0Adiff --git a/spec/10-expressions.md b/spec/10-expressions.md=0Ainde= x c1a1445..7431eaf 100644=0A--- a/spec/10-expressions.md=0A+++ b/spec/10-ex= pressions.md=0A@@ -902,82 +902,23 @@ class C=0A <!-- GRAMMAR=0A postfix-exp= ression:=0A primary-expression=0A- clone-expression=0A object-creation= -expression=0A postfix-increment-expression=0A postfix-decrement-expres= sion=0A- exponentiation-expression=0A -->=0A =0A <pre>=0A <i id=3D"grammar= -postfix-expression">postfix-expression:</i>=0A <i><a href=3D"#grammar-p= rimary-expression">primary-expression</a></i>=0A- <i><a href=3D"#grammar-= clone-expression">clone-expression</a></i>=0A <i><a href=3D"#grammar-obj= ect-creation-expression">object-creation-expression</a></i>=0A <i><a hre= f=3D"#grammar-postfix-increment-expression">postfix-increment-expression</a= ></i>=0A <i><a href=3D"#grammar-postfix-decrement-expression">postfix-de= crement-expression</a></i>=0A- <i><a href=3D"#grammar-exponentiation-expr= ession">exponentiation-expression</a></i>=0A </pre>=0A =0A **Semantics**=0A= =0A These operators associate left-to-right.=0A =0A-### The `clone` Operat= or=0A-=0A-**Syntax**=0A-=0A-<!-- GRAMMAR=0A-clone-expression:=0A- 'clone' = expression=0A--->=0A-=0A-<pre>=0A-<i id=3D"grammar-clone-expression">clone-= expression:</i>=0A- clone <i><a href=3D"#grammar-expression">expression= </a></i>=0A-</pre>=0A-=0A-**Constraints**=0A-=0A-*expression* must designat= e an object.=0A-=0A-**Semantics**=0A-=0A-The `clone` operator creates a new= object that is a shallow copy of the object designated by *expression*.=0A= -Then, if the class type of *expression* has a method called [`__clone`](14= -classes.md#method-__clone), it is called to perform a deep copy.=0A-The re= sult is the new object.=0A-=0A-**Examples**=0A-=0A-Consider a class `Employ= ee`, from which is derived a class `Manager`. Let us=0A-assume that both cl= asses contain properties that are objects. `clone` is=0A-used to make a cop= y of a `Manager` object, and behind the scenes, the=0A-`Manager` object use= s clone to copy the properties for the base class,=0A-`Employee`.=0A-=0A-``= `PHP=0A-class Employee=0A-{=0A- //...=0A- public function __clone()=0A- = {=0A- // make a deep copy of Employee object=0A- }=0A-}=0A-class Manage= r extends Employee=0A-{=0A- //...=0A- public function __clone()=0A- {=0A= - $v =3D parent::__clone();=0A- // make a deep copy of Manager object= =0A-=0A- }=0A-}=0A-$obj1 =3D new Manager("Smith", 23);=0A-$obj2 =3D clone = $obj1; // creates a new Manager that is a deep copy=0A-```=0A-=0A ### The = `new` Operator=0A =0A **Syntax**=0A@@ -1803,18 +1744,80 @@ class Point=0A }= =0A ```=0A =0A+## The `clone` Operator=0A+=0A+**Syntax**=0A+=0A+<!-- GRAMMA= R=0A+clone-expression:=0A+ postfix-expression=0A+ 'clone' postfix-express= ion=0A+-->=0A+=0A+<pre>=0A+<i id=3D"grammar-clone-expression">clone-express= ion:</i>=0A+ <i><a href=3D"#grammar-postfix-expression">postfix-expressio= n</a></i>=0A+ clone <i><a href=3D"#grammar-postfix-expression">postfix-= expression</a></i>=0A+</pre>=0A+=0A+**Constraints**=0A+=0A+*postfix-express= ion* must designate an object.=0A+=0A+**Semantics**=0A+=0A+The `clone` oper= ator creates a new object that is a shallow copy of the object designated= =0A+by *postfix-expression*.=0A+Then, if the class type of *postfix-express= ion* has a method called=0A+[`__clone`](14-classes.md#method-__clone), it i= s called to perform a deep copy.=0A+The result is the new object.=0A+=0A+**= Examples**=0A+=0A+Consider a class `Employee`, from which is derived a clas= s `Manager`. Let us=0A+assume that both classes contain properties that are= objects. `clone` is=0A+used to make a copy of a `Manager` object, and behi= nd the scenes, the=0A+`Manager` object uses clone to copy the properties fo= r the base class,=0A+`Employee`.=0A+=0A+```PHP=0A+class Employee=0A+{=0A+ = //...=0A+ public function __clone()=0A+ {=0A+ // make a deep copy of E= mployee object=0A+ }=0A+}=0A+class Manager extends Employee=0A+{=0A+ //..= .=0A+ public function __clone()=0A+ {=0A+ $v =3D parent::__clone();=0A= + // make a deep copy of Manager object=0A+=0A+ }=0A+}=0A+$obj1 =3D new= Manager("Smith", 23);=0A+$obj2 =3D clone $obj1; // creates a new Manager = that is a deep copy=0A+```=0A+=0A+=0A ## Exponentiation Operator=0A =0A **S= yntax**=0A =0A <!-- GRAMMAR=0A exponentiation-expression:=0A- postfix-expr= ession '**' exponentiation-expression=0A+ clone-expression=0A+ clone-expr= ession '**' exponentiation-expression=0A -->=0A =0A <pre>=0A <i id=3D"gramm= ar-exponentiation-expression">exponentiation-expression:</i>=0A- <i><a hr= ef=3D"#grammar-postfix-expression">postfix-expression</a></i> ** <i><a = href=3D"#grammar-exponentiation-expression">exponentiation-expression</a></= i>=0A+ <i><a href=3D"#grammar-clone-expression">clone-expression</a></i>= =0A+ <i><a href=3D"#grammar-clone-expression">clone-expression</a></i> = ** <i><a href=3D"#grammar-exponentiation-expression">exponentiation-expre= ssion</a></i>=0A </pre>=0A =0A **Semantics**=0Adiff --git a/spec/19-grammar= .md b/spec/19-grammar.md=0Aindex 4fcba00..584e39e 100644=0A--- a/spec/19-gr= ammar.md=0A+++ b/spec/19-grammar.md=0A@@ -457,14 +457,9 @@ The grammar nota= tion is described in [Grammars section](09-lexical-structure.md#=0A =0A <i = id=3D"grammar-postfix-expression">postfix-expression:</i>=0A <i><a href= =3D"#grammar-primary-expression">primary-expression</a></i>=0A- <i><a hre= f=3D"#grammar-clone-expression">clone-expression</a></i>=0A <i><a href= =3D"#grammar-object-creation-expression">object-creation-expression</a></i>= =0A <i><a href=3D"#grammar-postfix-increment-expression">postfix-increme= nt-expression</a></i>=0A <i><a href=3D"#grammar-postfix-decrement-expres= sion">postfix-decrement-expression</a></i>=0A- <i><a href=3D"#grammar-exp= onentiation-expression">exponentiation-expression</a></i>=0A-=0A-<i id=3D"g= rammar-clone-expression">clone-expression:</i>=0A- clone <i><a href=3D"= #grammar-expression">expression</a></i>=0A =0A <i id=3D"grammar-object-crea= tion-expression">object-creation-expression:</i>=0A new <i><a href=3D"= #grammar-class-type-designator">class-type-designator</a></i> ( <i><a h= ref=3D"#grammar-argument-expression-list">argument-expression-list</a></i><= sub>opt</sub> )=0A@@ -561,8 +556,13 @@ The grammar notation is described = in [Grammars section](09-lexical-structure.md#=0A parent=0A static=0A= =0A+<i id=3D"grammar-clone-expression">clone-expression:</i>=0A+ <i><a h= ref=3D"#grammar-postfix-expression">postfix-expression</a></i>=0A+ clone = <i><a href=3D"#grammar-postfix-expression">postfix-expression</a></i>=0A+= =0A <i id=3D"grammar-exponentiation-expression">exponentiation-expression:<= /i>=0A- <i><a href=3D"#grammar-postfix-expression">postfix-expression</a>= </i> ** <i><a href=3D"#grammar-exponentiation-expression">exponentiatio= n-expression</a></i>=0A+ <i><a href=3D"#grammar-clone-expression">clone-e= xpression</a></i>=0A+ <i><a href=3D"#grammar-clone-expression">clone-expr= ession</a></i> ** <i><a href=3D"#grammar-exponentiation-expression">exp= onentiation-expression</a></i>=0A =0A <i id=3D"grammar-unary-expression">un= ary-expression:</i>=0A <i><a href=3D"#grammar-exponentiation-expression"= >exponentiation-expression</a></i>=0A