类与对象的一些思考 (一)

本文探讨了PHP中类的封装性,通过一个实例展示了如何使用__set和__get魔术方法来增强类的封装,避免外部直接修改私有属性,如性别,从而提高程序的安全性和维护性。
<?php
echo '<pre />';

class Test
{
public $name;
public $email;
public $content;
// public $gender = '男';
private $gender = '男';

public function __set($name, $value)
{
if (!in_array($name,['男','女'])) {
return; //不符合预期的值不允许进行赋值
}
$this->$name = $value;
}

public function __get($name)
{
return $this->$name = '123';
}

public function SayGender()
{
//性别应是从数据库取出或给的默认值,但gender的可见性是public,这就表示它允许被外部客户端修改,这无疑破坏了类的封装性,并且给程序带来安全隐患,比如sql注入等
//所以gender属性应被设置为private或者至少为protected,只允许类或者子类修改,如果需要被外部所修改那么应该使用__set这个魔术方法并在魔术方法内部做好判断处理以备所设置的值符合预期
echo '我的性别是' . $this->gender;
}
}

$t = new Test();
$t->gender = '未知';
$t->sayGender();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值