php5中常用的魔术方法(php中怎么用get)
本文目录
- php中怎么用get
- 如何使用PHP5中的Clone函数
- PHP:对象->变量名可以访问类中的变量,如果访问的变量被private修饰,怎么不报错呢
- 谁能用比较通俗的语言解释一下php类中的构造函数,他的作用以及为什么会存在
php中怎么用get
php面向对象_get(),_set()的用法一般来说,总是把类的属性定义为private,这更符合现实的逻辑。但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来获取和赋值其属性。类似于java中的javabean的操作,使用的方法也类似,只是不需要像javabean中那样,对每个字段进行set和get的操作。只需要加上两个魔术方法即可。即私有成员的设值和取值的操作。在PHP5中给我们提供了专门为属性设置值和获取值的方法,“__set()”和“__get()”这两个方法,这两个方法不是默认存在的,而是我们手工添加到类里面去的,像构造方法(__construct())一此销样,类里面添加了才会存在,可以按下面的方式来添加这两个方法,当然也可以按个人的风格来添加://__set()方法用来设置私有属性public function __set($name,$value){ $this-》$name = $value; } //__get()方法用来获取私有属性 public function __get($name){ return $this-》$name; }__get()方法:这个方法用来获取私有成员属性值的,有一个参数,参数传入你要获取的成员属性的名称,返回获取的属性值,这个方法穗哪不用我们手工的去调用,因为我们也可以把这个方法做成私有的方法,是在直接获取私有属性的时候对象自动调用的。因为私有属性已经被封装上了,是不能直接获取值的,但是如果你在类里面加上了这个方法,在使用“echo$p1-》name”这样的语句直接获取值的时候就会自动调用__get($name)方法,将属性name传给参数$name,通过这个方法的内部执行,返回我们传入的私有属性的值。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。__set()方法:这个方法用来为私有成员属性设置值的,有两个参数,第一个参数为你要为设置值的属性名,第二个参数是要给属性设置的值,没有返回值。这个方法同样不用我们手工去调用,它也可以做成私有的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了,如果没有__set()这个方法,是不允许的,比如:$this-》name=‘zhangsan’,这样会出错,但是如果你在类里面加上了__set($property_name, $value)这个方法,在直接给私有属性赋值的时候,就会自动调用它,把属性比如name传给$property_name,把要赋的值“zhangsan”传给$value,通过这个方法的执行,达到赋值的猜扒码目的。如果成员属性不封装成私有的,对象本身就不会去自动调用这个方法。为了不传入非法的值,还可以在这个方法给做一下判断。代码如下:《?phpclassPerson{//下面是人的成员属性,都是封装的私有成员private $name; //人的名子private $sex; //人的性别private $age; //人的年龄//__get()方法用来获取私有属性private function__get($property_name){echo"在直接获取私有属性值的时候,自动调用了这个__get()方法《br》";if(isset($this-》$property_name)){return($this-》$property_name);}else{return(NULL);}}//__set()方法用来设置私有属性private function__set($property_name,$value){echo"在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值《br》";$this-》$property_name= $value;}}$p1=newPerson();//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值$p1-》name="张三";$p1-》sex="男";$p1-》age=20;//直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值echo "姓名:".$p1-》name."《br》";echo"性别:".$p1-》sex."《br》";echo"年龄:".$p1-》age."《br》";?》程序执行结果:在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值在直接获取私有属性值的时候,自动调用了这个__get()方法姓名:张三在直接获取私有属性值的时候,自动调用了这个__get()方法性别:男在直接获取私有属性值的时候,自动调用了这个__get()方法年龄:20以上代码如果不加上__get()和__set()方法,程序就会出错,因为不能在类的外部操作私有成员,而上面的代码是通过自动调用__get()和__set()方法来帮助我们直接存取封装的私有成员的。
如何使用PHP5中的Clone函数
面向对象的魔术方法__clone 克隆对象
对一个对象实例进行的浅复制,对象内的基本数值类型进行的是传值复制,而对象内的对象型成员变量,如果不重写__clone方法,显式的clone这个对象成员变量的话,这个成员变量就是传引用复制,而不是生成一个新的对象.如第28行注释所说
1 《?php 2 class Account { 3 public $balance; 4 5 public function __construct($balance) { 6 $this-》balance = $balance; 7 } 8 } 9 10 class Person {11 private $id;12 private $name;13 private $age;14 public $account;15 16 public function __construct($name, $age, Account $account) {17 $this-》name = $name;18 $this-》age = $age;19 $this-》account = $account;20 }21 22 public function setId($id) {23 $this-》id = $id;24 }25 26 public function __clone() { #复制方法,可在里面定义再clone是进行的操作27 $this-》id = 0;28 $this-》account = clone $this-》account; #不加这一句,account在clone是会只被复制引用,其中一个account的balance被修改另一个也同样会被修改29 }30 }31 32 $person = new Person("peter", 15, new Account(1000));33 $person-》setId(1);34 $person2 = clone $person;35 36 $person2-》account-》balance = 250;37 38 var_dump($person, $person2);39 40 ?》
$person和$person2的结果分别为:
object(Person)#1 (4) { =》 int(1) =》 string(5) "peter" =》 object(Account)#2 (1) { =》 int(1000) } } object(Person)#3 (4) { =》 string(5) "peter" =》 object(Account)#4 (1) { =》 int(250) } }
PHP:对象->变量名可以访问类中的变量,如果访问的变量被private修饰,怎么不报错呢
在PHP5中,“__set()”和“__get()”这两个方法,专门为私有属性设置值和获取值的方法,如果是public属性的话,不用这两个函数可以访问属性;
这两个魔法函数可以这么理解,就是外面访问 $oo-》type=’DIY’;的type只是一个名字,传递到类,类里面的一个方法给类的私有属性赋值,而不是在类外面直接赋值,传递到类里面的方法进行赋值;
这两个方法不是默认存在的,而是我们手工添加到类里面去的,才能对类添加属性和获取属性。
谁能用比较通俗的语言解释一下php类中的构造函数,他的作用以及为什么会存在
从php5以后的版本,php的类就可以使用魔术方法了。php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。PHP中的魔术方法有 :__construct,__destruct,__get, __set等__get、__set 这两个方法是为在类和他们的父类中没有声明的属性而设计的。__get( $property ) 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名__set( $property, $value ) 给一个未定义的属性赋值时,此方法会被触发,传递的参数是被设置的属性名和值这里的没有声明包括当使用对象调用时,访问控制为proteced,private的属性(即没有权限访问的属性)。 在php语言中,类构造器有两种方法,一种是使用__construct,另一种是使用与类同名的方法。__construct 构造方法,当一个对象创建时调用此方法,相对于PHP4使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称。
更多文章:
thinkpad sl400驱动(thinkpad s系列驱动)
2024年7月24日 09:31