rfc:nested_classes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:nested_classes [2013/10/01 23:37] – [Private Classes] krakjoe | rfc:nested_classes [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 4: | Line 4: | ||
* Date: 2013-09-29 | * Date: 2013-09-29 | ||
* Author: Joe Watkins, krakjoe@php.net | * Author: Joe Watkins, krakjoe@php.net | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 41: | Line 41: | ||
* public - the class is accessible everywhere | * public - the class is accessible everywhere | ||
* private - the class may be accessed by any class declared in the //outer// class | * private - the class may be accessed by any class declared in the //outer// class | ||
- | * protected - the class may be accessed | + | * protected - the class may be access |
===== Private Classes ===== | ===== Private Classes ===== | ||
Line 134: | Line 134: | ||
{ | { | ||
$this-> | $this-> | ||
- | $this-> | + | $this-> |
} | } | ||
} | } | ||
Line 146: | Line 146: | ||
< | < | ||
Fatal error: Cannot access private class foo\bar\baz from foo in %s on line 39 | Fatal error: Cannot access private class foo\bar\baz from foo in %s on line 39 | ||
+ | </ | ||
+ | |||
+ | ===== Protecting bits of your Privates ===== | ||
+ | |||
+ | The following example shows how protected and private classes can be used in conjunction to provide versatile encapsulation: | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | /* | ||
+ | * foo | ||
+ | * @package foo | ||
+ | */ | ||
+ | class foo | ||
+ | { | ||
+ | /* | ||
+ | * foo\bar supporting class for foo | ||
+ | * @subpackage foo\bar | ||
+ | * @private | ||
+ | */ | ||
+ | private class bar | ||
+ | { | ||
+ | |||
+ | /* | ||
+ | * \foo\bar\baz supporting class for foo\bar | ||
+ | * @subpackage foo\bar\baz | ||
+ | * @protected | ||
+ | */ | ||
+ | protected class baz | ||
+ | { | ||
+ | |||
+ | public function __construct() { | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | public function __construct() { | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* PUBLIC API METHODS HERE */ | ||
+ | |||
+ | public function __construct() | ||
+ | { | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | var_dump(new \foo()); | ||
+ | </ | ||
+ | |||
+ | Output: | ||
+ | |||
+ | < | ||
+ | object(foo)# | ||
+ | [" | ||
+ | object(foo\bar)# | ||
+ | [" | ||
+ | object(foo\bar\baz)# | ||
+ | } | ||
+ | } | ||
+ | [" | ||
+ | object(foo\bar\baz)# | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The protected class '' | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | /* | ||
+ | * foo | ||
+ | * @package foo | ||
+ | */ | ||
+ | class foo | ||
+ | { | ||
+ | /* | ||
+ | * foo\bar supporting class for foo | ||
+ | * @subpackage foo\bar | ||
+ | * @private | ||
+ | */ | ||
+ | private class bar | ||
+ | { | ||
+ | |||
+ | /* | ||
+ | * \foo\bar\baz supporting class for foo\bar | ||
+ | * @subpackage foo\bar\baz | ||
+ | * @protected | ||
+ | */ | ||
+ | protected class baz | ||
+ | { | ||
+ | |||
+ | public function __construct() { | ||
+ | |||
+ | } | ||
+ | } | ||
+ | |||
+ | public function __construct() { | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | /* | ||
+ | * \foo\qux supporting class for foo | ||
+ | */ | ||
+ | private class qux extends foo\bar\baz | ||
+ | { | ||
+ | public function __construct() { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /* PUBLIC API METHODS HERE */ | ||
+ | |||
+ | public function __construct() | ||
+ | { | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | var_dump(new \foo()); | ||
+ | </ | ||
+ | |||
+ | Output: | ||
+ | |||
+ | < | ||
+ | object(foo)# | ||
+ | [" | ||
+ | object(foo\bar)# | ||
+ | [" | ||
+ | object(foo\bar\baz)# | ||
+ | } | ||
+ | } | ||
+ | [" | ||
+ | object(foo\bar\baz)# | ||
+ | } | ||
+ | [" | ||
+ | object(foo\qux)# | ||
+ | } | ||
+ | } | ||
</ | </ | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== |
rfc/nested_classes.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1