php构造函数魔术方法,PHP笔记之构造方法、魔术方法

本篇主要记录类的创建,下面是创建类,声明变量,方法的基本形式

注意

$this 对象内部方法中代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员,还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问。

class BoyFriend{

//声明变量(成员属性)

var $name ;//基本不使用var

var $age;

var $sex;

var $height;

//成员方法

public function fuck(){

echo $this -> name."fuckU";

}

}

类的初始化

//两种形式都可以

$bf1 = new BoyFriend();

$bf2= new BoyFriend;

//赋值

$bf1 -> name = "jack";

$bf1.name 此种形式虽然能显示出来,但是是错误的,因为此处的.是连接,而不是类似于OC的点语法

构造函数

1.是对象创建完成以后,第一个自动调用的方法

2.方法名比较特殊,可以和类名相同名的方法名

3.给对象中的成员赋值

4.构造方法的魔术方法__construct;相当于OC的便利构造器

// function __construct()与下面等同,目前主要用此形式

function BoyFriend($name,$age,$sex){

$this->name = $name;

$this->age = $age;

$this->sex = $sex;

echo $this->name.$this->age.$this->sex.'
';

}

//初始化并赋值

$bf1 = new BoyFriend("wp",23,"男");

$bf2 = new BoyFriend("sb",30,"女");

析构函数

类似于OC中的dealloc,但原理机制不同,和Java垃圾回收差不多,PHP的垃圾回收,但并不常用

__destruct 对象回收之前自动调用,析构函数没有参数,无返回值

function __destruct(){

echo "###{$this->name}再见!
";//此处先释放bf2,再释放bf1,栈先进后出

}

封装

在属性或方法前添加修饰词private、public、protect等,下面着重强调访问私有变量的一些方法。

当成员变量为私有时,不可直接访问

class BoyFriend{

//声明变量(成员属性)

private $name ;

private $age;

private $sex;

//私有变量赋值

function setSex($sex){

//对象本身还是可以获取自己的变量;

$this -> sex = $sex;

}

function setAge($age){

$this -> age = $age;

}

//私有对象取值

function getAge(){

//通过判断这一过程,重新赋值

if ($this->age<20) {

return $this->age;

}else{

return "whatTheHell";

}

}

//getSex 与上类似不写了

//在构造函数中使用set方法赋值

function __construct($name,$age,$sex){

$this -> sex = $this->setSex($sex);

$this -> age = $this->setAge($age);

}

}

//获取值

$bf1 = new BoyFriend("wp",28,"男");

echo $bf1 -> getAge();

echo $bf1 -> getSex();

其实这一部分就相当于OC中的setter、getter方法,接下来是两个相关的魔术方法,会大大缩减所需写的方法

魔术方法

__get();

自动调用:是在直接访问私有成员时,自动调用

class BoyFriend{

private $age;

private $sex;

function __get($pro){

//自动调用私有属性,传进来私有属性名称

return $this->$pro.'
';

}

}

//直接读取私有属性会自动调用__get()

echo $bf1->sex.'
';

echo $bf2->age.'
';

__set();

自动调用,是在设置属性值时自动调用, 赋值时自动获取私有变量名称及值

class BoyFriend{

private $age;

private $sex;

function __set($name,$value){

echo "{$name}=={$value}
";

$this->$name = $value;

}

}

$bf1->age = 111;

$bf1->sex = "非洲人";

接下来两个魔术函数,并不常用,了解即可

isset()判断变量是否存在,unset()消除某个变量,这在变量是非私有性质的时候是可以的,但是当变量是私有的时候,需要用到__isset()和__unset()结合使用才能访问私有变量。

class BoyFriend{

//变量(成员属性)

private $name ;

private $age;

private $sex;

function __construct($name,$age,$sex){

$this->name = $name;

$this->age = $age;

$this->sex = $sex;

}

//在isset()判断私有变量时,自动调用__isset();同时获取私有变量名称

function __isset($proname){

echo $proname.'
';

// return isset($this->$proname);

}

function __unset($proname){

echo $proname.'
';

if ($proname!="age") {

unset($this->$proname);

}

}

}

$bf1 = new BoyFriend("wp",28,"男");

if (isset($bf1->name)) {

echo "存在name";

}else{

echo "不存在";

}

//删除

unset($bf1->name);

__toString

1.是在直接使用echo print printf输出一个对象引用时,自动调用这个方法

2.将对象的基本信息放在__toString()方法内部,形成字符串返回。

3.__toString()方法中,不能有参数,而且必须返回一个字符串

克隆对象

1.使用clone这个关键字 复制了一个对象

$p = new Person();

$p1 = clone $p ;

__clone()魔术方法

1.是在克隆对象时,自动调用的方法

2.作用:和构造方法一样,是对新克隆的对象初始化

3.在这个方法中$this代表的是副本,所以可以给所有副本的成员初始化

function__clone(){

$this->name = "123";

$this->age = 9;

}

__call()

1.就是在调用一个对象中不存在的方法时,自动调用的方法

2.有两个参数,第一个参数是,调用不存在的方法名,第二个是参数

3.可以写提示,但不是主要功能。将方法的功能相似,但方法名还要不同的,可以采取这个方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值