<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>爱周末 &#187; php访问控制</title>
	<atom:link href="http://zhoumo123.cn/tag/php%e8%ae%bf%e9%97%ae%e6%8e%a7%e5%88%b6/feed" rel="self" type="application/rss+xml" />
	<link>http://zhoumo123.cn</link>
	<description>知识分享，共同进步。zhoumo123.cn</description>
	<lastBuildDate>Thu, 07 Nov 2019 05:53:49 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>php访问控制public、protected、private 声明类成员类方法</title>
		<link>http://zhoumo123.cn/php/php-jichu/2370.html</link>
		<comments>http://zhoumo123.cn/php/php-jichu/2370.html#comments</comments>
		<pubDate>Wed, 07 Jan 2015 02:46:28 +0000</pubDate>
		<dc:creator><![CDATA[zhangc]]></dc:creator>
				<category><![CDATA[php基础]]></category>
		<category><![CDATA[php访问控制]]></category>

		<guid isPermaLink="false">http://zhoumo123.cn/?p=2370</guid>
		<description><![CDATA[访问控制 对属性或方法的访问控制，是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问；由 protected 所定义的类成员则可以被其所在类的子类和父类访问（当然，该成员所在的类也可以访问）；而由 private 定义的类成员则只能被其所在类访问。 对类成员的访问控制 类成员都必须使用关键字public、protected 或 private 进行定义 &#160; Example #1 声明类成员 Note: 为了兼容性考虑，在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍 ...  <a href="http://zhoumo123.cn/php/php-jichu/2370.html">  阅读全文 </a>]]></description>
				<content:encoded><![CDATA[<p><strong>访问控制</strong></p>
<p>对属性或方法的访问控制，是通过在前面添加关键字<strong> public、protected 或 private</strong> 来实现的。由 <strong>public</strong> 所定义的类成员可以在任何地方被访问；由 <strong>protected</strong> 所定义的类成员则可以被其所在类的子类和父类访问（当然，该成员所在的类也可以访问）；而由 <strong>private</strong> 定义的类成员则只能被其所在类访问。</p>
<p><strong>对类成员的访问控制</strong></p>
<p>类成员都必须使用关键<strong>字public、protected 或 private</strong> 进行定义</p>
<p>&nbsp;</p>
<p><em><strong>Example #1 声明类成员</strong></em></p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this-&gt;public;
        echo $this-&gt;protected;
        echo $this-&gt;private;
    }
}

$obj = new MyClass();
echo $obj-&gt;public; // 这行能被正常执行
echo $obj-&gt;protected; // 这行会产生一个致命错误
echo $obj-&gt;private; // 这行也会产生一个致命错误
$obj-&gt;printHello(); // 输出 Public、Protected 和 Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义，但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this-&gt;public;
        echo $this-&gt;protected;
        echo $this-&gt;private;
    }
}

$obj2 = new MyClass2();
echo $obj-&gt;public; // 这行能被正常执行
echo $obj2-&gt;private; // 未定义 private
echo $obj2-&gt;protected; // 这行会产生一个致命错误
$obj2-&gt;printHello(); // 输出 Public、Protected2，但不会输出 Private

class Bar 
{
    public function test() {
        $this-&gt;testPrivate();
        $this-&gt;testPublic();
    }

    public function testPublic() {
        echo &quot;Bar::testPublic\n&quot;;
    }
    
    private function testPrivate() {
        echo &quot;Bar::testPrivate\n&quot;;
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo &quot;Foo::testPublic\n&quot;;
    }
    
    private function testPrivate() {
        echo &quot;Foo::testPrivate\n&quot;;
    }
}

$myFoo = new foo();
$myFoo-&gt;test(); // Bar::testPrivate 
                // Foo::testPublic
?&gt; 

</pre>
<p>Note: 为了兼容性考虑，在 PHP 4 中使用 var 关键字对变量进行定义的方法在 PHP 5 中仍然有效（只是作为 public 关键字的一个别名）。在 PHP 5.1.3 之前的版本，该语法会产生一个 E_STRICT 警告。</p>
<p><strong>对方法的访问控制</strong></p>
<p>类中的方法都必须使用关键字<strong>public、protected</strong> 或 <strong>private</strong> 进行定义。如果没有设置这些关键字，则该方法会被设置成默认的 <strong>public</strong>。<br />
<strong>Example #2 声明类中的方法</strong></p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Define MyClass
 */
class MyClass
{
    // 构造函数必须是 public
    public function __construct() { }

    // 声明一个 public 的方法
    public function MyPublic() { }

    // 声明一个 protected 的方法
    protected function MyProtected() { }

    // 声明一个 private 的方法
    private function MyPrivate() { }

    // 这个方法也是 public 的
    function Foo()
    {
        $this-&gt;MyPublic();
        $this-&gt;MyProtected();
        $this-&gt;MyPrivate();
    }
}

$myclass = new MyClass;
$myclass-&gt;MyPublic(); // 这行能被正常执行
$myclass-&gt;MyProtected(); // 这行会产生一个致命错误
$myclass-&gt;MyPrivate(); // 这行会产生一个致命错误
$myclass-&gt;Foo(); // Public、Protected 和 Private 都被调用了


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // This is public
    function Foo2()
    {
        $this-&gt;MyPublic();
        $this-&gt;MyProtected();
        $this-&gt;MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2-&gt;MyPublic(); // 这行能被正常执行
$myclass2-&gt;Foo2(); // Public 和 Protected 都被调用了，但 Private 不会被调用
?&gt; 

</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://zhoumo123.cn/php/php-jichu/2370.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
