rfc:returntypehint

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:returntypehint [2010/07/28 19:38] – New example feliperfc:returntypehint [2010/07/29 01:36] – - Update examples felipe
Line 1: Line 1:
-====== Request for Comments: How to write RFCs ======+====== Request for Comments: Return type-hint ======
   * Version: 1.0   * Version: 1.0
   * Date: 2010-07-28   * Date: 2010-07-28
Line 33: Line 33:
 PHP Catchable fatal error:  The returned value must be of the type scalar, PHP Catchable fatal error:  The returned value must be of the type scalar,
 called in ... on line 9 and returning in ... on line 4 called in ... on line 9 and returning in ... on line 4
 +*/
 +</code>
 +
 +=== Using an user class type ===
 +
 +<code php>
 +<?php
 +
 +class Bar { }
 +
 +class Foo extends Bar {
 + public function Bar test($x) {
 + return $x;
 + }
 +}
 +
 +$foo = new Foo;
 +$foo->test($foo);         // ok
 +$foo->test(new stdClass); // fail
 +/*
 +PHP Catchable fatal error:  The returned value should be instance of Bar,
 +called in ... on line 13 and returning in ... on line 7
 */ */
 </code> </code>
Line 50: Line 72:
 } }
 // PHP Fatal error:  Declaration of Foo::bar() must be compatible with that of ITest::bar() in ... on line 7 // PHP Fatal error:  Declaration of Foo::bar() must be compatible with that of ITest::bar() in ... on line 7
 +</code>
 +
 +=== Using a namespaced class ===
 +
 +<code php>
 +<?php
 +
 +namespace foo {
 +class foo { }
 +class bar extends foo { }
 +}
 +
 +namespace bar {
 +class bar {
 + public function \foo\foo test() {
 + return new \foo\bar;
 + }
 +}
 +
 +$bar = new bar;
 +$bar->test(); // ok
 +}
 </code> </code>
  
Line 72: Line 116:
  
 $func = new ReflectionMethod('foo::test'); $func = new ReflectionMethod('foo::test');
-var_dump($func->getReturnType()); // "Test" +var_dump($func->getReturnTypeHint());   // "Test" 
-var_dump($func->returnsObject()); // true +var_dump($func->returnsObject());       // true
-var_dump($func->returnsClass());  // "Test"+
 </code> </code>
  
Line 87: Line 130:
  
 $func = new ReflectionFunction('abc'); $func = new ReflectionFunction('abc');
-var_dump($func->getReturnType()); // scalar+var_dump($func->getReturnTypeHint()); // scalar 
 +var_dump($func->returnsScalar());     // true
 </code> </code>
  
 +=== Using "self" as type ===
 +
 +<code php>
 +<?php
 +
 +class foo {
 + function self bar() {
 + return new foo;
 + }
 +}
 +
 +$func = new ReflectionMethod('foo::bar');
 +var_dump($func->getReturnTypeHint()); // foo
 +var_dump($func->returnsObject());     // true
 +</code>
  
 ===== Patch ===== ===== Patch =====
  
-Comming soon+  * Engine + Reflection: http://felipe.ath.cx/diff/returntypehint.diff 
 +  * Tests: http://felipe.ath.cx/diff/tests/return_typehint_tests.zip
rfc/returntypehint.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1