本文目录一览:
- 1、php中get和set有什么区别呀?
- 2、PHP中__get和__set的功能
- 3、eclipse php中get和set方法的生成设置,右击source中有方法,但是调用不出来
- 4、php redis 怎么读取set
- 5、php怎么获得头文件中的Set-Cookie
- 6、PHP __get和__set魔术方法在面向对象中的使用问题
php中get和set有什么区别呀?
简单的说一个是取值,一个是赋值。
,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的,而是我们手工添加到类里面去的,像构造方法(__construct())一样, 类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加:
//__get()方法用来获取私有属性
private function __get($property_name)
{
if(isset($this-$property_name))
{
return($this-$property_name);
}else
{
return(NULL);
}
}
//__set()方法用来设置私有属性
private function __set($property_name, $value)
{
$this-$property_name = $value;
}
__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的(比如:“echo $p1-name”这样直接获取是错误的),但是如果你在类里面加上了这个方法,在使用“echo $p1-name”这样的语句直接获取值的时候就会自动调用__get($property_name)方法,将属性name传给参数$property_name,通过这个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。
__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上
了,如果没有__set()这个方法,是不允许的,比如:$this-name=‘zhangsan’, 这样会出错,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name, 把要赋的值“zhangsan”传给$value,通过这个方法的执行,达到赋值的目的。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。
PHP中__get和__set的功能
__get和__set类似于.net中的属性访问器,用于给类中的私有字段赋值。但注意,一般这种方式只能给一个字段赋值,当你的类中有多个字段的时候,建议使用function
getProperty(){}和function
setProperty(value)的形式(类似于java)。
所以上述代码你使用的方式完全错误:
class
Employee
{
$name
public
function
__get()
{
return
$name;//取得私有字段的值
}
public
function
__set($propValue)
{
this-$name
=
$propValue;//给私有字段赋值
}
}
eclipse php中get和set方法的生成设置,右击source中有方法,但是调用不出来
你点击window------prefernces--在上面输入key 搜搜
在General--Keys 这个选项把默认键重置一下
php redis 怎么读取set
?php
$redis = new Redis();
//*********无序集合**********//
//添加set
$redis-
sadd('set1' , 'ab');
$redis-sadd('set1' , 'cd');
$redis-sadd('set1' , 'ef');
//返回集合所有成员
var_dump($redis-smembers('set1'));
//返回集合随机元素
var_dump($redis-srandmember('set1'));
//*********有序集合**********//
//添加zset
$redis-zadd('zset1' , 1 , 'ab');
$redis-zadd('zset1' , 2 , 'cd');
$redis-zadd('zset1' , 3 , 'ef');
//返回指定区间的而元素
$redis-zrange('zset1' , 0 ,1); //0和1之间的元素
//更多请查手册
php怎么获得头文件中的Set-Cookie
参考如下:
/*-----保存COOKIE-----*/
$url = 'IP'; //url地址
$post = "id=userpwd=123456"; //POST数据
$ch = curl_init($url); //初始化
curl_setopt($ch,CURLOPT_HEADER,1); //将头文件的信息作为数据流输出
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //返回获取的输出文本流
curl_setopt($ch,CURLOPT_POSTFIELDS,$post); //发送POST数据
$content = curl_exec($ch); //执行curl并赋值给$content
preg_match('/Set-Cookie:(.*);/iU',$content,$str); //正则匹配
$cookie = $str[1]; //获得COOKIE(SESSIONID)
curl_close($ch); //关闭curl
/*-----使用COOKIE-----*/
curl_setopt($ch,CURLOPT_COOKIE,$cookie);
PHP __get和__set魔术方法在面向对象中的使用问题
php的面向对象思想编程中声明方法有三种不同的权限:public protect private。
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。
这些权限同样可以应用在变量声明中。
__set __get 都是php的魔术方法,主要是为了用来改变类的私有属性用的。
你觉得麻烦可以将private私有的变量改为公共public变量,这个要看需求和个人对面向对象的思考。
追问 : 我想知道的是(用private封装然后用__set或者__get )和(public设置类的属性)有什么不同.都可以取值赋值.
追答 : 没什么不同的,实现的效果都一样,只是private是为了限制访问入口少一些,或者之前用private时没有考虑到有如今的调用情况,所以在加了set或get。 比较public是所有人都可以访问,private是内部人可以访问,从权限来看,private会安全一些。