10分钟学会php面相对象基础(Ⅲ)

final 可以适用final 定义类或者方法,这样定义的是最终方法或类,这样的方法或类不能被覆盖;
final class Person
{
    function say()
    {
 
    }
}

STATIC 类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。

前面说到过内存的四个区域 堆、栈、初始化静态段、?

静态变量被放置于初始化静态段,其他子类并不能访问他,只有实例可以访问,而且用的是同一个,节省了很多内存,不用每次都去实例化这一部分。

 静态成员被这个类的每个实例对象所共享;

使用对象访问不到静态成员的;

类里面的静态方法只能访问类的静态的属性;

静态的方法是不用对象调用的,而是使用类名来访问;

在静态方法中访其它静态成员我们使用的是一个特殊的类“self”;
 
class Person

{

   static $country = "china";

   public function say(){

   echo self::country;

   }

}

Person::say();

$xiaomin = new Person();

$xiaomin->say();

const是一个定义常量的关键字,与static类似,不能用 $THIS 访问,也不能用对象来访问;另外命名时不用加『$』,如下

class Person

{

   const country = "china";

   public static function say(){

   echo self::$country;

   }

}

echo Person::contry;

$P1= new Person;

$P1->say();

__toString()方法

如果你在类里面定义了“__toString()”方法,在直接输出对象引用的时候,就不会产生错误,而是自动调用 了”__toString()”方法, 输出“__toString()”方法中返回的字符,所以“__toString()”方法一定要有个返回值(return 语句)

class Person

{

   static $country = "china";

   public $name;

   function __construct($name){

   $this->name = $name;

   }

   public static function say(){

   echo self::$country;

   }

   function __toString(){

   return $this->name;

   }

}

$p1= new Person('xiaoming');

echo $p1;

输出了:xiaoming;

clone 方法和 __clone();克隆,当需要一个或多个相同的对象时,可以使用克隆,

__CLONE()中还提供了两个指针,this 和 that,this指复制体,that指爸爸 = =;

以上面那个例子写下来;

$P2=CLONE $P1;

__clone可以在clone时起效,如下例子;

class Person

 

{

 

   static $country = "china";

 

   public $name;

 

   function __construct($name){

 

   $this->name = $name;

 

   }

 

   public static function say(){

 

   echo self::$country;

 

   }

 

public function __toString(){

return $this->name;

}

public function __clone(){

$this->name = "复制体".$this->name;

}

}

 

$P1 = NEW PERSON("CC");

 

$P2 = CLONE $P1;

 

ECHO $P1; //CC

ECHO $P2; //复制体CC

?>
 此处有疑问,我在网上很多地方看到了这个that,但是实际查官方文档没找到,试了以下用this也没问题;
 

__call() 方法 调用对象内部的一个方法而这个方法不存在时,会报错,然后停止运行,这时候可以用__CALL 来解决;

继续上面那段,最后加入

$P2->havefun("1");

echo "test";

这时候报错 Fatal error: Call to undefined method Person::havefun(); test也不会输出;

__call($n,$ary) call包含两个参数,第一个为不存在的方法的名称,第二个怎么以数组的方式接收这个方法传过来的一个或多个参数

在上面的代码中加入  

function __call($n,$ary){
        print "functionname=".$n;
        print "参数为:";
        print_r($ary);
    }

则能够输出:unctionname=havefun参数为:Array ( [0] => 1 ) test;

原文地址:https://www.cnblogs.com/07byte/p/5825520.html