get和set的知识 __get() 获取私有属性__set() 设置私有属性class aabb{private $name;private $age}实例化后 如何分别设置这2个私有属性呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class aabb{ private $name; private $age private function __set($name,$value){$this->name = $value;}} $obj = new aabb();$obj->name = 'adsfa';实例化后 如何分别设置这2个私有属性呢? 直接赋值,当成公有属性就行了 private function __set($name,$value)这里的$name 是否就是 private $name???如何在给private $age付值?__get() 有什么用?谢谢 个人觉得这样使用的话还不如不用private 从程序结构理解上不够清晰,让人觉得很费解。至少我个人认为这不是个多么好的功能class aabb{ private $name; private $age private function __set($name,$value){ // 处理$name,$value后操作private 变量$this->name = $value;}} $obj = new aabb();$obj->name = 'adsfa';既然 $obj->name 可以通过 __set 调用,完全可以自己写个 public 方法来处理 $name可是如果有__set 的话,会导致其他的private 成员也会被公开个人感觉还是不要使用__set __get ,对象的私有方法应该专用处理 ($name,$value) 对应的是 $obj->xxxx = 'bbbb';$name -> xxxx$value -> bbbb 直接赋值,当成公有属性就行了如果我要分别 给2个私有属性赋值 但是private function __set($name,$value){$this->name = $value;}这个里的规则是不一样的怎么办 private function __set($name,$value) { $this->$name = $value; } __set __get主要功能是,用当到权限分配时, 在里面可以加判断来是否操作私有变量, 如果单凭在函数里赋值和取值, 纯属多此一举, 这个也是很多新手入门的弊端 还是不懂__get() __set() TO 8# 其实从对象的封装上来说,如果__set __get 仅仅针对部分private 的话,和普通的public 方法应该没什么两样了。 如果从__set 或者 __get 方面来说,个人感觉这还是破坏了对象的封装性。个人还是不太推荐使用这两方法 __get() __set() 是php类内置的两个方法,其他还有__CALL __sleep __wakeup 等等这些方法都执行预定的功能,比如$obj->name = 'my';实际就是执行 $obj->__set('name', 'my');而echo $obj->name;实际就是执行echo $obj->__get('name');这些内置方法同时也提供给php程序员,通过重载这些方法,可以使php程序员得以改变php对象的行为 恩。我特地又翻了下手册看了看这方面手册中演示的是针对private Array 的数据操作,如祖宁所说,在部分Object 内改变操作方法例如<?phpclass Demo(){ private $user; function __construct() { $this->user = array(); } function __set($key,$value) { $this->user[$key] = $value; } function __get($key) { if(isset($this->user[$key])) { return $this->user[$key]; } else { return "NULL"; } }}$DemoObj = new Demo();$DemoObj->a = "40"; // in Object private user['a'] = 40;$DemoObj->b = "50"; // in Object private user['b'] = 50;echo $DemoObj->a;?>从上面我们看呢,代码是挺方便。挺简洁的..其实我们换个角度来想想,在实际构造这个Object的时候,我们已经很明确的定义 user为private 意思就是这个user不能被其他对象所调用。虽然$Demo->a 形式上看起来是外部直接调用,但在其实现机制上却是通过 __get来实现 。从代码层次,我们是被迷惑了为什么不是 $Demo->GetUser($a); 呢?这样看起来其实更好些现在也不知道PHP的实现是怎么实现的,是不是我们所声明的CLASS都默认继承了PHP的一个内置obj?不论是让我们继承一个还是PHP内置了实现方法,我个人对这种操作还不是太习惯,也不支持 不知道这样写你能否明白set和get两个老师的作用class 开放式幼儿园{ public $幼儿园里的儿子;}$送儿子去幼儿园 = new 开放式幼儿园;$送儿子去幼儿园->幼儿园里的儿子 = '小班';$放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//直接可以到 开放式幼儿园 的 小班 里接class 封闭式幼儿园{ private $幼儿园里的儿子; public function __set($小朋友,$班级){ $this->$小朋友 = $班级;//家长不能进幼儿园,只能把儿子送到幼儿园门口请set老师带进去 } public function __get($小朋友){ return $this->$小朋友;//家长不能进幼儿园,儿子又不在门口,只能喊个名字让get老师送出来 }}$送儿子去幼儿园 = new 封闭式幼儿园;$送儿子去幼儿园->幼儿园里的儿子 = '小班';//这里要请__set()老师帮忙了$放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//这里要请__get()老师帮忙了 如果想知道 __get 和 __set 的魔力,请看elgg1.5 的数据层设计. class pc{ private $name; private $age; function prints(){ echo $this->name; echo $this->age; } function __set($name,$var){ $this->age=$var; $this->name=$var; } }$pc1=new pc();$pc1->name="孩子";$pc1->age="50";$pc1->prints();这个的意思应该写??分别对2个私有属性赋值 然后 执行方法 class pc{ .. .. public function __get($name,$value){ $this->$name = $value; }} 微薄短域名是怎么算出来的? 水平的文字不能滚动 表格中如何输出数据库中的图片 怎么把目录内文件名赋值到数组,再把数组值放到下拉菜单中?php新手 什么叫上载文件?为什么要上载文件? 关于正则表达式, 求助:php怎样通过匹配表单名的部分字符串来获取相应表单的值? 请帮我看看这段程序,关于分页,谢谢 这个有关插入程序那里错呀! 关于PHP与Web Services <input type="file" name="file" / > 怎么配置zend studio6.1.2/zend studio7.0
class aabb{
private $name;
private $age
private function __set($name,$value)
{
$this->name = $value;
}
}
$obj = new aabb();
$obj->name = 'adsfa';实例化后 如何分别设置这2个私有属性呢?
直接赋值,当成公有属性就行了
这里的$name 是否就是 private $name???
如何在给private $age付值?
__get() 有什么用?
谢谢
从程序结构理解上不够清晰,让人觉得很费解。至少我个人认为这不是个多么好的功能
class aabb{
private $name;
private $age
private function __set($name,$value)
{
// 处理$name,$value后操作private 变量
$this->name = $value;
}
}
$obj = new aabb();
$obj->name = 'adsfa';
既然 $obj->name 可以通过 __set 调用,完全可以自己写个 public 方法来处理 $name
可是如果有__set 的话,会导致其他的private 成员也会被公开个人感觉还是不要使用__set __get ,对象的私有方法应该专用处理
($name,$value) 对应的是 $obj->xxxx = 'bbbb';
$name -> xxxx
$value -> bbbb
{
$this->name = $value;
}这个里的规则是不一样的怎么办
{
$this->$name = $value;
}
__set __get主要功能是,用当到权限分配时, 在里面可以加判断来是否操作私有变量, 如果单凭在函数里赋值和取值, 纯属多此一举, 这个也是很多新手入门的弊端
__get() __set()
这些方法都执行预定的功能,比如
$obj->name = 'my';
实际就是执行 $obj->__set('name', 'my');
而
echo $obj->name;
实际就是执行
echo $obj->__get('name');这些内置方法同时也提供给php程序员,通过重载这些方法,可以使php程序员得以改变php对象的行为
<?php
class Demo()
{
private $user;
function __construct()
{
$this->user = array();
} function __set($key,$value)
{
$this->user[$key] = $value;
} function __get($key)
{
if(isset($this->user[$key]))
{
return $this->user[$key];
}
else
{
return "NULL";
}
}
}$DemoObj = new Demo();
$DemoObj->a = "40"; // in Object private user['a'] = 40;
$DemoObj->b = "50"; // in Object private user['b'] = 50;
echo $DemoObj->a;?>从上面我们看呢,代码是挺方便。挺简洁的..其实我们换个角度来想想,在实际构造这个Object的时候,我们已经很明确的定义 user为private
意思就是这个user不能被其他对象所调用。虽然$Demo->a 形式上看起来是外部直接调用,但在其
实现机制上却是通过 __get来实现 。从代码层次,我们是被迷惑了
为什么不是 $Demo->GetUser($a); 呢?这样看起来其实更好些现在也不知道PHP的实现是怎么实现的,是不是我们所声明的CLASS都默认继承了PHP的一个内置obj?
不论是让我们继承一个还是PHP内置了实现方法,我个人对这种操作还不是太习惯,也不支持
class 开放式幼儿园{
public $幼儿园里的儿子;
}
$送儿子去幼儿园 = new 开放式幼儿园;
$送儿子去幼儿园->幼儿园里的儿子 = '小班';
$放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//直接可以到 开放式幼儿园 的 小班 里接
class 封闭式幼儿园{
private $幼儿园里的儿子;
public function __set($小朋友,$班级){
$this->$小朋友 = $班级;//家长不能进幼儿园,只能把儿子送到幼儿园门口请set老师带进去
}
public function __get($小朋友){
return $this->$小朋友;//家长不能进幼儿园,儿子又不在门口,只能喊个名字让get老师送出来
}
}
$送儿子去幼儿园 = new 封闭式幼儿园;
$送儿子去幼儿园->幼儿园里的儿子 = '小班';//这里要请__set()老师帮忙了
$放学接儿子去 = $送儿子去幼儿园->幼儿园里的儿子;//这里要请__get()老师帮忙了
elgg1.5 的数据层设计.
private $age;
function prints(){
echo $this->name;
echo $this->age;
}
function __set($name,$var){
$this->age=$var;
$this->name=$var;
}
}$pc1=new pc();
$pc1->name="孩子";
$pc1->age="50";
$pc1->prints();这个的意思应该写??
分别对2个私有属性赋值 然后 执行方法
class pc{
..
..
public function __get($name,$value){
$this->$name = $value;
}
}