Source of: /manual/en/language.oop5.visibility.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'language.oop5.visibility.php',
1 => 'Visibility',
),
'up' =>
array (
0 => 'language.oop5.php',
1 => 'Classes and Objects',
),
'prev' =>
array (
0 => 'language.oop5.decon.php',
1 => 'Constructors and Destructors',
),
'next' =>
array (
0 => 'language.oop5.inheritance.php',
1 => 'Object Inheritance',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="language.oop5.visibility" class="sect1">
<h2 class="title">Visibility</h2>
<p class="para">
The visibility of a property or method can be defined by prefixing
the declaration with the keywords <em class="emphasis">public</em>,
<em class="emphasis">protected</em> or
<em class="emphasis">private</em>. Class members declared public can be
accessed everywhere. Members declared protected can be accessed
only within the class itself and by inherited and parent
classes. Members declared as private may only be accessed by the
class that defines the member.
</p>
<div id="language.oop5.visibility-members" class="sect2">
<h3 class="title">Property Visibility</h3>
<p class="para">
Class properties must be defined as public, private, or
protected. If declared using <em class="emphasis">var</em> without an
explicit visibility keyword, the property will be defined as
public.
</p>
<p class="para">
</p><div class="example">
<p><b>Example #1 Property declaration</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/**<br /> * Define MyClass<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$public </span><span style="color: #007700">= </span><span style="color: #DD0000">'Public'</span><span style="color: #007700">;<br /> protected </span><span style="color: #0000BB">$protected </span><span style="color: #007700">= </span><span style="color: #DD0000">'Protected'</span><span style="color: #007700">;<br /> private </span><span style="color: #0000BB">$private </span><span style="color: #007700">= </span><span style="color: #DD0000">'Private'</span><span style="color: #007700">;<br /><br /> function </span><span style="color: #0000BB">printHello</span><span style="color: #007700">()<br /> {<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">public</span><span style="color: #007700">;<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">protected</span><span style="color: #007700">;<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">private</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$obj </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">public</span><span style="color: #007700">; </span><span style="color: #FF8000">// Works<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">protected</span><span style="color: #007700">; </span><span style="color: #FF8000">// Fatal Error<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">private</span><span style="color: #007700">; </span><span style="color: #FF8000">// Fatal Error<br /></span><span style="color: #0000BB">$obj</span><span style="color: #007700">-></span><span style="color: #0000BB">printHello</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Shows Public, Protected and Private<br /><br /><br />/**<br /> * Define MyClass2<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass2 </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// We can redeclare the public and protected method, but not private<br /> </span><span style="color: #007700">protected </span><span style="color: #0000BB">$protected </span><span style="color: #007700">= </span><span style="color: #DD0000">'Protected2'</span><span style="color: #007700">;<br /><br /> function </span><span style="color: #0000BB">printHello</span><span style="color: #007700">()<br /> {<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">public</span><span style="color: #007700">;<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">protected</span><span style="color: #007700">;<br /> echo </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">private</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$obj2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass2</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$obj2</span><span style="color: #007700">-></span><span style="color: #0000BB">public</span><span style="color: #007700">; </span><span style="color: #FF8000">// Works<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$obj2</span><span style="color: #007700">-></span><span style="color: #0000BB">private</span><span style="color: #007700">; </span><span style="color: #FF8000">// Undefined<br /></span><span style="color: #007700">echo </span><span style="color: #0000BB">$obj2</span><span style="color: #007700">-></span><span style="color: #0000BB">protected</span><span style="color: #007700">; </span><span style="color: #FF8000">// Fatal Error<br /></span><span style="color: #0000BB">$obj2</span><span style="color: #007700">-></span><span style="color: #0000BB">printHello</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Shows Public, Protected2, Undefined<br /><br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
<blockquote><p><b class="note">Note</b>:
<span class="simpara">
The PHP 4 method of declaring a variable with the
<em class="emphasis">var</em> keyword is still supported for compatibility
reasons (as a synonym for the public keyword). In PHP 5 before 5.1.3, its
usage would generate an <b><tt class="constant">E_STRICT</tt></b> warning.
</span>
</p></blockquote>
</div>
<div id="language.oop5.visiblity-methods" class="sect2">
<h3 class="title">Method Visibility</h3>
<p class="para">
Class methods may be defined as public, private, or
protected. Methods declared without any explicit visibility
keyword are defined as public.
</p>
<p class="para">
</p><div class="example">
<p><b>Example #2 Method Declaration</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #FF8000">/**<br /> * Define MyClass<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// Declare a public constructor<br /> </span><span style="color: #007700">public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">() { }<br /><br /> </span><span style="color: #FF8000">// Declare a public method<br /> </span><span style="color: #007700">public function </span><span style="color: #0000BB">MyPublic</span><span style="color: #007700">() { }<br /><br /> </span><span style="color: #FF8000">// Declare a protected method<br /> </span><span style="color: #007700">protected function </span><span style="color: #0000BB">MyProtected</span><span style="color: #007700">() { }<br /><br /> </span><span style="color: #FF8000">// Declare a private method<br /> </span><span style="color: #007700">private function </span><span style="color: #0000BB">MyPrivate</span><span style="color: #007700">() { }<br /><br /> </span><span style="color: #FF8000">// This is public<br /> </span><span style="color: #007700">function </span><span style="color: #0000BB">Foo</span><span style="color: #007700">()<br /> {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPublic</span><span style="color: #007700">();<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyProtected</span><span style="color: #007700">();<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPrivate</span><span style="color: #007700">();<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$myclass </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$myclass</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPublic</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Works<br /></span><span style="color: #0000BB">$myclass</span><span style="color: #007700">-></span><span style="color: #0000BB">MyProtected</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Fatal Error<br /></span><span style="color: #0000BB">$myclass</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPrivate</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Fatal Error<br /></span><span style="color: #0000BB">$myclass</span><span style="color: #007700">-></span><span style="color: #0000BB">Foo</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Public, Protected and Private work<br /><br /><br />/**<br /> * Define MyClass2<br /> */<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass2 </span><span style="color: #007700">extends </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// This is public<br /> </span><span style="color: #007700">function </span><span style="color: #0000BB">Foo2</span><span style="color: #007700">()<br /> {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPublic</span><span style="color: #007700">();<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyProtected</span><span style="color: #007700">();<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPrivate</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Fatal Error<br /> </span><span style="color: #007700">}<br />}<br /><br /></span><span style="color: #0000BB">$myclass2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass2</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$myclass2</span><span style="color: #007700">-></span><span style="color: #0000BB">MyPublic</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Works<br /></span><span style="color: #0000BB">$myclass2</span><span style="color: #007700">-></span><span style="color: #0000BB">Foo2</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Public and Protected work, not Private<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Bar <br /></span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">testPrivate</span><span style="color: #007700">();<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">testPublic</span><span style="color: #007700">();<br /> }<br /><br /> public function </span><span style="color: #0000BB">testPublic</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"Bar::testPublic\n"</span><span style="color: #007700">;<br /> }<br /> <br /> private function </span><span style="color: #0000BB">testPrivate</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"Bar::testPrivate\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">extends </span><span style="color: #0000BB">Bar <br /></span><span style="color: #007700">{<br /> public function </span><span style="color: #0000BB">testPublic</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"Foo::testPublic\n"</span><span style="color: #007700">;<br /> }<br /> <br /> private function </span><span style="color: #0000BB">testPrivate</span><span style="color: #007700">() {<br /> echo </span><span style="color: #DD0000">"Foo::testPrivate\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$myFoo </span><span style="color: #007700">= new </span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$myFoo</span><span style="color: #007700">-></span><span style="color: #0000BB">test</span><span style="color: #007700">(); </span><span style="color: #FF8000">// Bar::testPrivate <br /> // Foo::testPublic<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
</div><p>
</p>
</div>
</div><?php manual_footer(); ?>