加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php应用实例,[PHP]类的完整应用实例

发布时间:2023-01-08 10:07:05 所属栏目:PHP教程 来源:网络
导读: class ClassA{//定义类
//关键字可以是public,private,protected,static,final
public $name;
private $num;
//定义一个类常量
const PI=3.14;
function __construct(){//一个构造方法

class ClassA{//定义类

//关键字可以是public,private,protected,static,final

public $name;

private $num;

//定义一个类常量

const PI=3.14;

function __construct(){//一个构造方法

$this->name='defaultName';

echo 'ClassA构造完毕:'.$this->name.'

';

//$name='defaultName';这是创建了一个局部变量$name,与成员变量$name无关

}

function __destruct(){//析构方法,可在unset(类实例)或被垃圾回收时自动调用

echo $this->name.' die

';

}

//下面这个是一个经过final修饰后,不可重写(覆盖)的方法

public final function add($a,$b,$num){//方法前面可以加访问限制符php实例,也可以不(默认public修饰)

$this->num=$num;

return('function add:'.$a+$b+$num);

}

}

final class ClassB extends ClassA{//ClassB继承了ClassA且ClassB经过final修饰后不可再被继承

function __construct($name){//这是多态的覆盖,覆盖了父类方法

parent::__construct();//调用父类构造:可以没有,仅做parent的使用演示

//parent可以调用父类中的成员变量,成员方法和常量

$this->name=$name;

echo 'ClassB构造完毕:'.$this->name.'

';

echo 'self调用:'.self::PI.'

';

//self可以调用当前类中的静态成员和常量

}

function classFunction(){

echo 'get_class($object):'.get_class($this);//获得类

}

//当访问一个不存在的或者私有属性(权限不够)或方法的时候,能够触发的下列的魔术方法

//参考:

function __set($name, $value){//设置属性的时候自动触发

echo "失败的设置($name:$value)

";

}

function __get($name){//获取属性的时候自动触发

echo "失败的获取($name)

";

}

function __isset($name){//isset和empty时自动触发

echo "失败的isset或empty($name)

";

}

function __unset($name){//unset时自动触发

echo "失败的unset($name)

";

}

function __call($name, $arguments){//访问一个非静态方法时自动触发

echo "失败的非静态方法调用($name)

";

echo '参数'.count($arguments).':

';

foreach($arguments as $value){

echo $value.'

';

}

}

static function __callStatic($name, $arguments){//访问一个静态方法时自动触发

echo "失败的静态方法调用($name)

";

echo '参数'.count($arguments).':

';

foreach($arguments as $value){

echo $value.'

';

}

}

//当将类对象序列化的时候,将会触发以下方法

function __sleep(){

echo '__sleep:序列化后的对象可以存放到文本文件,数据库等地方

';

}

//当将序列化后的类对象还原的时候,将会触发以下方法

function __wakeup(){

echo '__wakeup:将已经序列化的字符串转换回对象

';

}

}

$var=new ClassA();//创建类实例

echo $var->name;

echo '

';

echo $var->add(3,4,8);//调用类方法

echo '

';

echo ClassA::PI;//通过类名输出类常量

echo '

';

$var=new ClassB('ClassB');//创建继承类的实例

echo $var->name;

echo '

';

$var->classFunction();

echo '

';

$var->num=3;//失败的设置(private修饰的变量只能类内调用和修改)

$var->a;//失败的获取

empty($var->a);//失败的empty

isset($var->a);//失败的isset

unset($var->a);//失败的unset

$var->a(1,2);//失败的非静态方法调用

ClassB::a(1,2);//失败的静态方法调用

echo '

';

abstract class People{

abstract function say();

}

interface Human_eat{

function eat();

}

interface Human_move{

function walk();

function jump();

}

class Me extends People implements Human_eat,Human_move{

public $num=1;

function say(){

$this->num=2;

echo 'I say something

';

}

function eat(){

echo 'I eat

';

}

function walk(){

echo 'I walk

';

}

function jump(){

echo 'I jump

';

}

function __clone(){//当类实例被克隆的时候调用该方法

echo '被克隆!

';

}

function __toString(){

return '人

';

}

}

$var = new Me();

$var->say();

$var->eat();

$var->walk();

$var->jump();

echo $var->num;

echo '

';

$i = clone $var;//克隆一个对象

echo $i->num;

echo '

';

if($var == $i)

echo '内容相等

';

if($var !== $i)

echo '地址不相等

';

if($var instanceof Me)//检测当前对象属于哪个类

echo '$var属于Me类

';

if($var instanceof People)

echo '$var属于People类

';

if($var instanceof $i)

echo '$var与$i同属于某个类

';

echo '

';

$str=serialize($var);//序列化成字符串

echo '序列化后的字符串:'.$str.'

';

$i=unserialize($str);//还原成对象

echo $var;//隐式调用__toString();

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!