码迷,mamicode.com
首页 > Web开发 > 详细

为了愉快的拍黄片,我也要好好学习php

时间:2016-08-05 16:02:25      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

新的项目用的是 laravel ,所以我终于开始愉快的学习世界上最好的语言了。

学习使我快乐,我爱学习 :)(我就用这句话表达,接触了两天的我对它的态度,ps:我始终相信 Javascript 终将统治世界!)

这篇文章主要说明两个问题:

1、php 引用问题 (&);

2、php 对象继承问题。

 

首先,php 引用 :

在变量或者函数、对象等前面加上 & 符号,不同的名字访问同一个变量内容。

1 <?
2     $a="ABC";
3     $b =&$a;
4     echo $a;//这里输出:ABC
5     echo $b;//这里输出:ABC
6     $b="EFG";
7     echo $a;//这里$a的值变为EFG 所以输出EFG
8     echo $b;//这里输出EFG
9 ?>

第 3 行 $b 引用了 $a ,这个的意思是说,$b 与 $a 共同指向同一个变量(两个变量指向同一个内容),$b 拥有 $a 的值,同时 可以通过改变 $b 来改变 $a 的值,这也就是 7 、8 行输出 EFG 的原因。

 

再看一个例子,嗯,看例子也使我快乐:)

 1 <?php
 2 function &test()
 3 {
 4     static $b=0;//申明一个静态变量
 5     $b=$b+1;
 6     echo $b;
 7     return $b;
 8 }
 9 
10 $a=test();//这条语句会输出 $b的值 为1
11 $a=5;
12 $a=test();//这条语句会输出 $b的值 为2
13 
14 $a=&test();//这条语句会输出 $b的值 为3
15 $a=5;
16 $a=test();//这条语句会输出 $b的值 为6
17 ?>

第 10 行,$a 调用 test 方法,因为没有加 & ,也就是不是引用,所以只是返回函数值,赋值给 $a ,输出 1 。

第 12 行,虽然 $a 在第 11 行,被赋值为 5 ,但由于仍然不是引用,所以没有能力改变 test 方法中的 $b 的值,调用的时候也只能 返回本来的函数值,由于在第 10 行的时候 $b 已经等于 1 了,所以再次调用 输出值为 2。

第 14 、 15 行 通过 $a = &test() 方式调用函数 , 它的作用是 将 return $b 中的 $b 变量的内存地址与 $a 变量的内存地址指向了同一个地方。这个时候改变 $a 的值,同时也会改变 $b 的值。于是第 16 行会输出 6。

 

 

第二个问题 php 对象继承问题:

 1 /**
 2  * Define MyClass
 3  */
 4 class MyClass
 5 {
 6     // 声明一个公有的构造函数
 7     public function __construct() { }
 8 
 9     // 声明一个公有的方法
10     public function MyPublic() { }
11 
12     // 声明一个受保护的方法
13     protected function MyProtected() { }
14 
15     // 声明一个私有的方法
16     private function MyPrivate() { }
17 
18     // 此方法为公有
19     function Foo()
20     {
21         $this->MyPublic();
22         $this->MyProtected();
23         $this->MyPrivate();
24     }
25 }
26 
27 $myclass = new MyClass;
28 $myclass->MyPublic(); // 这行能被正常执行,可以直接调用其 公有 的方法
29 $myclass->MyProtected(); // 这行会产生一个致命错误,不可以直接调用其 受保护的 方法
30 $myclass->MyPrivate(); // 这行会产生一个致命错误,不可以直接调用其 私有 的方法
31 $myclass->Foo(); // 公有,受保护,私有都可以执行,可以通过一个公有的方法,间接调用私有和受保护的方法  

 

 如果现在 我们定义一个新的类 MyClass 2,它继承了上面的 MyClass ,再调用公有和私有的方法 会怎么样呢?

 1 /**
 2  * Define MyClass2
 3  */
 4 class MyClass2 extends MyClass
 5 {
 6     // 此方法为公有
 7     function Foo2()
 8     {
 9         $this->MyPublic();
10         $this->MyProtected();
11         $this->MyPrivate(); // 这行会产生一个致命错误
12     }
13 }
14 
15 $myclass2 = new MyClass2;
16 $myclass2->MyPublic(); // 这行能被正常执行
17 $myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

第 16 行,调用之后,先在MyClass 2 中找 MyPublic 方法,没有找到,于是找他的父集,也就它继承的 MyClass 中找到了 MyPublic 方法,由于是公有的方法,所以可以调用,执行正常。

第 17 行,调用了 公有方法 Foo2 之后,里面包含了 3 个调用,对于公有的,和受保护的方法都与第16行一样,先从自己的里面找,没有找到,则去他的 父集MyClass 中找,找到就正常调用方法,而对于第三行的 那个私有方法调用,它就只能找寻自己内部有没有这个方法,没有则返回错误,不能去父集里直接调用它的私有方法。

 

虾面,再看另一个例子,看看是如何调用父集里的私有方法的,对比一下上面的例子:

 1 class Bar 
 2 {
 3     public function test() {
 4         $this->testPrivate();
 5         $this->testPublic();
 6     }
 7 
 8     public function testPublic() {
 9         echo "Bar::testPublic\n";
10     }
11     
12     private function testPrivate() {
13         echo "Bar::testPrivate\n";
14     }
15 }
16 
17 class Foo extends Bar 
18 {
19     public function testPublic() {
20         echo "Foo::testPublic\n";
21     }
22     
23     private function testPrivate() {
24         echo "Foo::testPrivate\n";
25     }
26 }
27 
28 $myFoo = new foo();
29 $myFoo->test(); // Bar::testPrivate 
30                 // Foo::testPublic

 

第 29 行,调用 test 方法之后,先在 自己里面找,没有找到,所以找到 父集 Bar 中,在第 3 行找到了 test 方法,于是执行。test 方法中,又有两个调用,第一个 ,调用 testPrivate 私有方法,于是在自己里面找,这个自己里面 指的是 bar 的里面,因为这个 调用是在 父集里面进行的,并且是通过一个 公有的 test 方法,调用自身的私有方法,于是返回的是 bar 的 testPrivate 私有方法。第二个调用 testPublic ,因为 foo 里已经重新定义了一个公有的方法,所以 foo 里的 testPublic 会将 父集的 testPublic 方法覆盖,优先调用 foo 里的 testPublic 方法,所以返回的是 foo 的 testPublic 。 

 

 

刚开始拍黄片,理解如有误,请指导~

 

最后再说一句:学习使我快乐:)

 

为了愉快的拍黄片,我也要好好学习php

标签:

原文地址:http://www.cnblogs.com/lijiayi/p/php1.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!