写PHP也已经有一段时间了,回忆之前写Java的一段经历,现归纳一些基本的概念
1.static关键字:
static关键字的目的是使方法或者属性名独立于类的实例,也就是说和类是同一级别的,与对象或者类本身关联。
static修饰的方法或者属性是可以通过类名直接访问的,当然,也是可以初始化对象,通过实例来访问。
所以static修饰的方法或者属性也叫全局变量或者方法
2.this关键字:
this关键字是与对象或者类的某个实例关联的
**不能在static方法中使用this关键字
3.self关键字:
self关键字是指向对象或者类本身,不指向任何已经实例化的对象
一般用来指向对象或者类中俄静态变量
4.parent关键字:
parent关键字即指向父类的指针
一般用来调用父类的构造方法
<?php class Test{ private $name = ''; private static $age = 20; public function __construct(){ $this->name = 'test'; } public function setName($name){ $this->name = $name; echo $this->name; } public static function setAge($age){ self::$age = $age; echo self::$age; //$this->age = $age; //error Using $this not in object context } } $test = new Test(); $test->setName('KingJ'); //KingJ echo '</br>'; $test->setAge(99); //99
5.继承的调用
<?php class A{ public function a(){ echo 'A:a'; } } class B extends A{ public function bb(){ $this->a(); } } $test = new B(); //此刻初始化子类B的时候,由于之类没有构造方法,就调用父类的构造方法a(),此时输出A:a $test->bb(); //在之类中可以用$this->function来调用父类的方法
6.PHP中的引用
php的引用就是在变量或者函数、对象等前面加上&符号
首先我们来看一个例子:
<?php $a = 100; //声明变量a $b = &$a; //声明变量b,引用自变量a echo "$a <br />"; echo "$b <br />"; $a++; //变量a自增1 echo "$a <br />"; echo "$b <br />";//查看变量b,也增加了1,说明使用的是同一存储单元
结果:
100 100 101 101
php中对于地址的指向功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发 生写操作,指向同一个地址的变量或者对象是不会被拷贝的。
php默认为传值传递:
<?php $a = 20; $b = $a; $a = $a + 10; echo $a.' and '.$b;
结果:
30 and 20
要是想变为地址传递需要加&,既:
<?php $a = 20; $b = &$a; $a = $a + 10; echo $a.' and '.$b;
结果:
30 and 30
也就是说,&把$a的地址传给了$b,这样的话这两个变量现在共享一个内存的存储区域,就是说它们的值是一样的。
同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:
<?php $bar =& new fooclass(); $foo =& find_var($bar)
引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下:
<?php function foo(&$val1, $val2) { $val1 += 1; $val2 += 1; } $a=5; $b=10; foo($a,$b); echo $a; echo $b;
运行这段代码是给函数传递两个参数,一个是引用$a的内容,一个是$b的值,在执行此函数后,发现$a的内容改变了,而$b的内容则没有变化。
PHP引用的第三个用法是引用返回,这个用法理解起来有点难度,引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引 用时,使用此语法:说的简单点,就还是引用函数的返回。但和参数传递不同,必须在函数定义和函数引用这两个地方都用 & 符号。下面举个例子:
<?php function &find_var ($param) { /* ...code... */ return $found_var; } $foo =& find_var ($bar); $foo->x = 2;
这个例子给$foo 赋值是函数find_var的返回引用,所以在给$foo->x赋值时就是给find_var的返回引用赋值,而不是简单的赋值。
PHP引用的最后一个用法是引用定位,主要有两个应用:一个是global 引用,当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是和$var =& $GLOBALS["var"];是一样的。另外一个是$this的用法,在一个对象的方法中,$this 永远是调用它的对象的引用。
7.php中的global
global $var1,$var2;
就是外部变量的同名引用,变量本身的作用范围仍然在函数体内。改变这些变量的值,外部的同名变量自然也改变。但是一旦用了&,那么变量将不再是同名引用。
$var1=1; $var2=2; function test() { global $var1,$var2;//作用范围就在函数体内 $var1=3; } test(); echo $var1;
结果一定是3。因为是同名引用嘛。
$var1=1; $var2=2; function test() { global $var1,$var2;//作用范围就在函数体内 $var1=&$var2; } test(); echo $var1;
结果一定是1。因为在函数内的$var1经过赋值后与$var2具有相同的引用了。
$var1=1; $var2=2; function test_global() { global $var1,$var2; $var1=&$var2; $var1=7; } test_global(); echo $var1; echo $var2;
结果一定是1和7。因为在函数内的$var1与$var2具有相同的引用。因此改变$var1的值,$var2的值也作了改变。
next to do ------------------------------------------