class Index{//class 类名(首字母大写)
private $ary = array();
var $var = '小于php5';//为兼容PHP5以前的版本,如果采用 var 定义,则被视为公有。
//$error = 0; //错误 属性必须定义访问控制
public $a = 1;//公共属性 可以实例化输出 无限制
/**受保护属性
* 不可以实例化输出
* 用在方法:1.本类方法可用
*2.继承后子类方法可用
***/
protected $b = 2;
/**私有属性
*不可以实例化输出
*用在方法:1.【只能在本类方法】可用
*2.继承后子类方法【不可用】
**/
private $c = 3;
/**静态属性
*不需要实例化可以直接输出
*Index::$d
**/
static public $d = 4;
//调用受保护属性
public function ff1(){
echo '这是受保护b'.$this->b.'<br>';
}
//调用私有属性
public function ff2(){
echo '这是私有,我不能继承使用'.$this->c.'<br>';
}
//静态方法下,调用静态属性,
//在方法中调用的静态属性前面须加self,self::$静态属性
static public function ff3(){
echo self::$d;//在方法调用静态属性
}
/**
*用在方法:public final function x() 当子类继承时该方法不被继承
*final class Xx 当子类继承时该类不能被继承
**/
public final function ff4(){
echo "不能被继承的方法";
}
/**构造函数
*1.每当实例化之后,第一步先执行构造函数
*2.当子类继承且子类也有构造函数时,只执行子类构造函数
*3.如果子类构造函数写上parent::__construct()则同时调用
*4.如果构造函数成为私有方法则不能实例化,只能通过如下
*class Car {
private function __construct() {
echo 'object create';
}
private static $_object = null;
public static function getInstance() {
if (empty(self::$_object)) {
self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象
}
return self::$_object;
}
}
//$car = new Car(); //这里不允许直接实例化对象
$car = Car::getInstance(); //通过静态方法来获得一个实例
*
**/
function __construct() {
echo "构造函数";
}
/**析构函数
*1.每当实例化的对象,程序执行完毕之后执行该函数
*2.当实例化的对象遭到销毁时执行
**/
function __destruct() {
echo "析构函数";
}
/**魔术方法
*__set() 对不存在的属性赋值
* __get() 对不存在的属性读取
*__isset 对不存在的属性判断
*__unset 对不存在的属性销毁
**/
public function __set($key, $val) {
$this->ary[$key] = $val;
}
public function __get($key) {
if (isset($this->ary[$key])) {
return $this->ary[$key];
}
return null;
}
public function __isset($key) {
if (isset($this->ary[$key])) {
return true;
}
return false;
}
public function __unset($key) {
unset($this->ary[$key]);
}
/**魔术方法__call()
*当调用对象中一个不存在的【方法】的时候,如果定义了__call()方法,则会调用该方法。
**/
function __call( $name, $arguments )
{
echo "__call调用<br/>";
echo '$name为'.$name."<br/>";
echo ($arguments);
}
/**魔术方法__callStatic
*当调用对象中一个不存在的【静态方法】的时候,如果定义了__callStatic方法,则会调用该方法。
**/
function __callStatic( $name, $arguments )
{
echo "__callStatic调用<br/>";
echo '$name为'.$name."<br/>";
echo ($arguments);
}
// echo Index::$d;//4
//echo Index::ff3();//4
// $Nindex = new Index();
//echo $Nindex->a;//1
// echo $Nindex->b;//报错
// echo $Nindex->c;//报错
//$Nindex->ff1();//这是受保护b2
//unset($Nindex);
//$Nindex->ff2();//这是私有,我不能继承使用3
//$str = serialize($Nindex); //对象序列化成字符串
}
文章借鉴https://www.jianshu.com/p/d3edc23718fc