先看代码:
<?php
클래스 StrictCoordinateClass {
private $arr = array('x' => NULL, 'y' => NULL);
함수 __construct() {
"StrictCoordinateClass가 생성되고 있습니다"를 인쇄합니다.
"<br/>" 인쇄;
}
함수 __destruct() {
"<br/>" 인쇄;
"StrictCoordinateClass가 파괴되고 있습니다"를 인쇄합니다.
}
함수 __get($property) {
if (array_key_exists($property, $this->arr)) {
$this->arr[$property]를 반환합니다.
} 또 다른 {
print "오류: x & yn 이외의 속성을 읽을 수 없습니다";
}
}
함수 __set($property, $value) {
if (array_key_exists($property, $this->arr)) {
$this->arr[$property] = $value;
} 또 다른 {
print "오류: x & y 이외의 속성을 쓸 수 없습니다n";
}
}
}
$obj = 새로운 StrictCoordinateClass();
$obj->x = 1;
$obj->x를 인쇄하세요;
"<br/>" 인쇄;
$obj->n = 2;
"<br/>" 인쇄;
$obj->n을 인쇄하세요;
?>
출시 활동:
StrictCoordinateClass를 생성하는 중입니다.
1
오류: x & y 이외의 속성을 쓸 수 없습니다.
오류: x & y 이외의 속성을 읽을 수 없습니다.
StrictCoordinateClass가 삭제되고 있습니다.
__construct() 및 __destruct()는 Java에서 사용하는 방식으로 C를 사용하는 방식입니다.
至于__get 와__set请看下文:
출처: http://www.phpchina.com/html/54/26354-31906.html
.__set() __get() __isset() __unset() 4가지 방법을 사용하여 비공개로 사용할 수 있는 강력한 보안 기능을 제공합니다.值操作是매우 중요하지 않은, PHP5중에서는 "__get()" 및 "__set()"을 사용하여 특정 방식을 결정하고, "__isset()" 및 "__isset()"을 사용하는 것이 좋습니다. “__설정 해제( )”。
上一节中, 우리는 PHP5중에서 우리가 사용하는 방식으로, "__set()" 및 "__get()"과 같은 "__set()" 및 "__get()"을 사용합니다.两个어떤 방법을 사용하든지 방법은 다음과 같습니다. 우리는 이 방법을 사용하지 않고 아래 면에 있는 방법을 사용합니다.式来添加这两个방법, 当然也可以按个人的风格来添加:
//__get()방법을 사용하는 방법
개인 함수__get($property_name) {
if(isset($this->$property_name)) {
return($this->$property_name);
}또 다른 {
반환(NULL);
}
}
//__set()방법을 사용하는 방법
개인 함수__set($property_name,$value) {
$this->$property_name=$값;
}
__get() 방법: 这个方法来获取私有成员属性值的,有一个参数,参数传入你要获取性成员属性性值,这个방법은 사용하지 않습니다.可以把这个属性已经被封装上了,是为私被封装上了,是不调直接获取值的(比如:“echo $p1->name”这样直接获取是错误的), 但是如果你는 类里地加上了这个방법으로, 使接获取是错误的), 使接获取是错误的这样的语句直接获取值的时候就个自动调사용__get($property_name)방법,将属性name传给参数$property_name ,通过这个方法的内执行,返回我们传入的私有属性的值。去自动调用这个방법입니다.
__set() 방법: 这个방법은 다음과 같습니다.给属性设置的值,没有返回值. 这个방법은 동일하지 않습니다.被封装上了,如果没有__set()这个방법법 ,是不允许的,比如:$this->name='zhangsan',这样会出错,但是如果你你你允许的,比如:$this->name='zhangsan',但是如果你你你佻里面加上了 __set($property_name, $value)这个方法,直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name,把要赋的值 "zhangsan"传给$value,达到赋值的目的。如果成员属성별이 불확실한데, 对象本身就不会去自动调用这个方法。为了不传入不平值,还可以在这个方法给做一下判断。代码如下:
<?php
클래스사람 {
//下면是人的成员属性, city是封装的私有成员
비공개 $name; //인명
비공개 $섹스; //개인적인 성격
비공개 $나이; //인생적인 해
//__get()방법을 사용하는 방법
개인 함수__get($property_name) {
echo"이(가) 공유됩니다. 자체적으로 사용하는 방법은 다음과 같습니다. get()방법<br>";
if(isset($this->$property_name)) {
return($this->$property_name);
} 또 다른 {
반환(NULL);
}
}
//__set()방법을 사용하는 방법
개인 함수__set($property_name,$value) {
echo"이(가) 현재 사용 중인 앱에서 자동으로 실행되고 있습니다.<br><br>";
$this->$property_name=$값;
}
}
$p1=newPerson();
//直接为私有属性赋值的操작품, 会自动调用__set()방법법행동赋值
$p1->name="张삼";
$p1->sex="男";
$p1->나이=20;
//直接获取私有属性的值, 会自动调用__get()방법, 返回成员属性值
echo"이름:".$p1->name."<br>";
echo"性别:".$p1->sex."<br>";
echo"年龄:".$p1->age."<br>";
?>
程序执行结果:
이 웹사이트에는 자동으로 사용되는 광고가 없습니다. __set()방법은 공유성 속성을 가지고 있습니다. 자동으로 사용하는 방법은 set()방법입니다.获取私有属性值的时候,自动调用了这个__get()방법론적 특성: 男男直接获取私有属性值的时候,自动调了这个__get()방법년龄:20
대체적인 방식은 불가능합니다. 나는 당신을 좋아합니다.
__isset() 방법: 이전에는 "isset()"을 사용하여 사용하는 방법은 다음과 같습니다.入的变weight存재존재回true,否则传回false."isset()"이 一个对象외부 인터페이스에서 사용 중입니다.两种情况,如果对象里面成员是公有的,저희는 个就可以使用这个函数来测定成员属性,如果是私有成员属性,这个函数就不起 창작용了,是因就是因为私多被封装了, 는 외부에 없습니다. "isset()"을 사용하는 방법은 "__isset()" 방법입니다. set()”설정 이 페이지는 "__isset()" 방식으로 작동하며 "__isset()" 방식을 사용합니다. 의 。你可以이类里面加上下면这样的代码就可以了 :
개인 함수__isset($nm) {
echo"当在类외부체용isset()函数测정확유유성员$nm时,自动调用<br>";
return isset($this->$nm);
}
__unset() 방법: 이전에 看这个방법법을 사용하면 우리는 "unset()" 这个函数, "unset()" 这个函数에 맞는 작업을 사용하여 是删除指의 양이 且传回true,参数为要删除의 가치 。那么如果는 외부 부서의 去删除对象内부에서 "unset()"을 사용하여 "unset()"을 사용합니다.员属性是public은 就可以使用这个函数에서 对象외면을 제공합니다.删除对象性, 如果对象的成员属性是私有的, 我使用这个函数就没有权限去删除, 但同样如果你 in 一个对象里 你除去删除加上 "__unset()"은 외부 외부에서 사용되는 방법입니다.删除对象 的私有成员属性了 . 对象里 加上了 "__unset()" 这个方法の后, 函数删除对象内时私有员属性时,自动调사용“__unset()”函数우리는 이 부분에 대해 매우 잘 알고 있습니다.
개인 함수__unset($nm) {
echo"외부에서 unset()을 사용하는 경우 자동으로 사용됩니다<br>";
unset($this->$nm);
}
내 경우는 다음과 같습니다.
<?php
클래스사람 {
//아래쪽의 인성 형성
비공개 $name; //인명
비공개 $섹스; //개인적인 성격
비공개 $나이; //인생적인 해
//__get()방법을 사용하는 방법
개인 함수__get($property_name) {
if(isset($this->$property_name)) {
return($this->$property_name);
}또 다른{
반환(NULL);
}
}
//__set()방법을 사용하는 방법
개인 함수__set($property_name,$value) {
$this->$property_name=$값;
}
//__isset()방법
개인 함수__isset($nm) {
echo"isset()函数测定私有成员时,自动调用<br>";
return isset($this->$nm);
}
//__unset()방법
개인 함수__unset($nm) {
echo"외부에서 unset()을 사용하는 경우 자동으로 사용됩니다<br>";
unset($this->$nm);
}
}
$p1=newPerson();
$p1->name="사람 이름입니다";
//이용자 isset()函数测定私有成员时, 自动调用__isset()方法帮我们完成, 返回结果为true
echovar_dump(isset($p1->name))."<br>";
echo $p1->이름."<br>";
//현재 unset()函数删除私有成员时,自动调用__unset()方法帮我们完成,删除name私有属性
unset($p1->이름);
//已经被删除了, 所这行不会有输流
에코 $p1->이름;
?>
출동 광고:
isset()은 사용자 정의를 위해 사용됩니다.
부울(사실)
이건 사람 이름이에요
当재외부에서 unset()函数来删除私有成员时自动调用
__set(), __get(), __isset(), __unset()은 우리가 사용하는 방식으로 외부에서 직접 사용할 수 있으며 외부에서 사용할 수 있는 기능을 제공합니다.