php中 重载(一)

不论你是什么样的程序员,或者运用什么语言进行编程,相信大家一定对重载一定不会陌生的,但是作为php的重载,却与众不同,因为是php这门语言(暂时理解为语言,脚本我不太喜欢)决定了它的风格,也许你是一个java程序员,那么你对重载一定会说的很彻底,但是php的重载却不是那样的,那么我们对比下java中的重载和php中的重载的定义:

1.java中的重载定义和php中的重载定义(白话文)

java重载:就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

php中重载:重新载入不可访问的成员的处理,称之为成员的重载(一般包括属性重载和方法重载);继续往下看....

2,代码对比

java:

public function a($a){}

public function a($a,$b){}//参数不同区分同名方法

php:

public function a($a){}//这个正确的

public function a($a,$b){}//不正确的定义

3.php中的属性重载

默认的,php是支持将属性重新加载的对象内部的!这种显现就称之为属性的重载!php对访问不可访问属性这种操作可以使用相应的处理方式进行处理!

利用php所提供的魔术方法来完成!

一共四个方法,分别处理属性操作的4个情况!

属性指的是不可访问的属性:一种不存在的属性,另一种通过访问修饰控制访问不到的

__set(),属性赋值。当赋值情况发生时,会自动执行到__set()方法,通过set方法内的代码,来决定如何处理该属性。得到两个参数,属性名和属性值!

__get(),读取属性值。当对不可访问属性获取值时,会自动调用该方法,该方法,获得当前的属性名加以操作!

__unset,删除属性。当删除私有属性时候自动调用该方法,根据内部实现unset()删除属性操作

__isset()判断当前的属性值。

class Student {

private $stu_id = ‘2014‘;//需要被读取

private $name = ‘php‘;//被读取

private $money = 0.0;//读取和设置

private $team_id = ‘2003‘;//读取和设置

//操作接口

//    public function getId() {}

//    public function getName() {}

//    public function getMoney() {}

//    public function getTeam() {}

//

//    public function setMoney() {}

//    public function setTeam() {}

/**

* 在为一个不可访问属性赋值时,会自动触发

* @param $property_name string 属性名

* @param $property_value mixed 属性值

*/

public function __set($property_name, $property_value) {

$allow_write = array(‘money‘, ‘team_id‘);

if(in_array($property_name, $allow_write)) {

//当前属性可读

$this->$property_name = $property_value;

}

}

public function __get($property_name) {

$allow_read = array(‘stu_id‘, ‘name‘, ‘money‘, ‘team_id‘);//所有可读的属性

if(in_array($property_name, $allow_read)) {

//当前属性可读

return $this->$property_name;

}

}

}

$stu = new Student;

echo $stu->stu_abcd;

echo ‘<hr>‘;

$stu->money = 3600.0;

echo $stu->money;

echo ‘<hr>‘;

$stu->name = ‘net‘;

echo $stu->name;

echo ‘<hr>‘;

$stu->new_p = ‘hao123‘;

echo $stu->new_p;

var_dump($stu);

***********************************************************************__unset和__isset******************************************************************************

class Student {

private $stu_id = ‘2014‘;//需要被读取

private $name = ‘php‘;//被读取

private $money = 0.0;//读取和设置

private $team_id = ‘2003‘;//读取和设置

public function __unset($p_name) {

//该属性可删除,在内部执行unset方法

if($p_name == ‘team_id‘) {

unset($this->$p_name);

}

}

public function __isset($p_name) {

if($p_name == ‘name‘ || $p_name == ‘team_id‘) {

return true;

} else {

return false;

}

}

}

$o = new Student;

var_dump(isset($o->stu_id));

var_dump(isset($o->name));

exit;

unset($o->stu_id);

unset($o->team_id);

var_dump($o);

总结:以上基本就是重载中的属性重载的基本用法,那么下一章节,有方法重载......

时间: 2024-08-04 13:59:25

php中 重载(一)的相关文章

C++中重载、重写(覆盖)和隐藏的区别实例分析

这篇文章主要介绍了C++中重载.重写(覆盖)和隐藏的区别,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念.具体分析如下: 1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: class A{ public: void test(int

php中 重载(二)

接着上一次说的重载,我们了解下php中的重载,方法的重载,假设有管重载定义,參考:php中 重载(一)这个文章,谢谢.作为刚開始学习的人,大牛勿喷: 基本是两个方法 __call,当调用对一个不可訪问的对象方法时,会自己主动运行该魔术方法!(对象调用) 典型的两种处理方式: 1,给出友好的提示! 2,运行默认操作! __callstatic,当调用一个不可訪问的静态方法时,会自己主动运行该魔术方法! 具体代码: class Student { public $name = 'php'; publ

在CTime类中重载&lt;&lt;和&gt;&gt;

程序代码: #include <iostream> using namespace std; class CTime//时间类 { private: unsigned short int hour; //时 unsigned short int minute; //分 unsigned short int second; //秒 public: CTime(int h=0,int m=0,int s=0);//构造函数 void setTime(int h,int m,int s);//设置时

php中 重载的方法

php中 重载(一)这个文章,谢谢.作为初学者,大牛勿喷: 基本是两个方法 __call,当调用对一个不可访问的对象方法时,会自动执行该魔术方法!(对象调用) 典型的两种处理方式: 1,给出友好的提示! 2,执行默认操作! __callstatic,当调用一个不可访问的静态方法时,会自动执行该魔术方法! 详细代码: class Student { public $name = 'php'; public $age = 10; public function sayName() { return

C++中重载运算符

重载运算符,可以定义运算符为自己想要的效果,简化程序,以重载<运算符为例: #ifndef BOX_H #define BOX_H class Box{ public: Box(double aLength=1.0,double aWidth=1.0,double aHeight=1.0); double volume() const; double getLength() const; double getWidth() const; double getHeight() const; //重

java中重载与重写浅析

java中重载与重写浅析 Overloading (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以

java中重载和覆盖(又称重写)的区别

初次见到这两个单词并没有什么特别的感觉,但是时间长了,却发现书上一会儿用override,一会儿又用overload,搞得我的迷迷糊.于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个帮助. override 可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用.对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方

C++中重载输入输出操作符

QT中封装了数据流类QDataStream和模板类QList.有时需要往流里写模板类对象,但是,QDataStream中,没有参数匹配的运算符重载函数operator<< .此时需要重载输入输出操作符函数,使之能支持模板类. 比如,自定义一个类: #include <QString> class UserType { public: UserType(); QString id; QString name; }; 实例化模板类QList<UserType>,声明一个Us

java中重载与重写的区别

首先我们来讲讲:重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不