类的声明与实例化
实例
/**
*类的声明与实例化
*/
class demo1//声明类
{
public $name = 'zhangsan';
public function __construct()
{
echo 'Hello world.';
}
$demo1 = new Demo1();//实例化类
运行实例 »
点击 "运行实例" 按钮查看在线实例
2.类常量与类属性的重载
实例
/**
*类常量与类属性的重载
*/
class demo2//声明类
{
const APP_NAME = 'PHP';//类常量
private $age = 28;
private $name = 'lisi';
private $sex = 1;
private $salary = 3800;
//类属性的重载
public function __get($str)
{
if(isset($this->$str))
{
return $this->$str;
}else{
return '属性不存在';
}
}
public function __set($str,$value)
{
if($str == 'age')
{
return $str.'不允许修改';
}else{
$this->$str = $value;
}
}
public function __isset($str)
{
if ($str == 'salary')
{
return false;
}
return isset($this->$str);
}
public function __unset($str)
{
if ($str == 'salary')
{
return '不能销毁';
}
unset($this->$str);
}
}
$demo2 = new Demo2();//实例化类
echo $demo2::APP_NAME,'
';//类常量的调用
//获取
echo $demo2->age,'
';
echo $demo2->height,'
','
';
//设置
$demo2->age = 40 ;
$demo2->salary = 4800;
echo $demo2->age,'
';
echo $demo2->salary,'
','
';
//检测
echo isset($demo2->salary) ? '存在' : '不存在' ,'
';
echo isset($demo2->name) ? '存在' : '不存在' ,'
','
';
//销毁
unset($demo2->sex);
echo $demo2->sex,'
';
unset($demo2->salary);
echo $demo2->salary,'
','
';
运行实例 »
点击 "运行实例" 按钮查看在线实例
3.类的继承与方法重写
实例
/**
* 对象三要素之: 继承与多态
* 1. 继承是指类之间的继承,是代码复用的重要手段,之前我们是通过"函数"实现的代码复用
* 2. 继承使用关键字: extends
* 3. 引用父类成员: parent::
* 4. 子类可以将父类中的公共和受保护成员全部继承
*/
class Demo3
{
//父类属性
const APP_NAME = 'PHP';
public $name;
protected $age;
private $salary;
//父类构造器
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
//属性访问重载
public function __get($name)
{
if (isset($this->$name)) {
return $this->$name;
}
return '非法属性';
}
}
class Demo4 extends Demo3
{
//子类自有属性
private $sex;
const APP_NAME = 'HTML'; //类常量可以在子类中重写
//子类将父类同名方法进行重写,根据传入参数不同,实现不同的功能,这就是多态性
public function __construct($name, $age, $sex='male')
{
//引用父类的构造方法来简化代码
parent::__construct($name, $age);
$this->sex = $sex;
}
//将父类属性重载方法重写后,顺利读取子类属性
//所以属性重载方法__get()应该设置在最终工作类中(例如本类Demo4),而不是父类Demo3中
//此时,将父类Demo3中的__get()删除,代码执行仍然正确
public function __get($name)
{
if (isset($this->$name)) {
return $this->$name;
}
return '非法属性';
}
}
//当前类Demo4中即使没有任何成员,一样可以访问父类成员
$demo4 = new Demo4('zhangsan', 28);
//访问父类中的属性
echo $demo4->name,'
';
echo $demo4->age,'
';
echo $demo4->salary,'
'; // 父类私有属性子类不可见,访问不到
echo Demo4::APP_NAME, '
'; // 访问类常量
echo $demo4->sex, '
'; //取不值,因为父类__get()不能识别子类属性
运行实例 »
点击 "运行实例" 按钮查看在线实例
4类中静态成员的声明与访问
实例
/**
* 类中的静态成员与访问
* 1.类中静态成员使用关键字:static 定义;
* 2.静态成员包括: 静态属性和静态方法;
* 3.静态成员是属于类的,我们应该终终使用类来访问;
* 4.静态属性必须使用类来访问,而静态方法即可以用类,也可以用对象访问;
* 5.静态成员是可以有访问限制的: public,protected,private;
* 6.静态成员与对象无关,所以内部不允许使用伪变量: $this;
* 7.访问时,类名后必须使用:范围解析符:双冒号[::]
* 8.在类中引用自身使用关键字: self::
*
* 范围解析符的作用:
* 1. 访问静态成员;
* 2. 访问类常量;
* 3. 继承上下文中引用被覆盖成员
*/
class Demo5
{
public static $name = '张三';
public static $age = 28;
public static $salary = 3000;
public static function getMassge()
{
return '姓名:'.self::$name.',年龄:'.self::$age.',工资:'.self::$salary;
}
}
//访问静态成员:无需实例化
echo demo5::$name,'
';
echo demo5::getMassge();
运行实例 »
点击 "运行实例" 按钮查看在线实例