php 之 类,对象(三)多态性,函数重载,克隆

一、三大特性之三 多态性(在php中表象不明显)
1.概念:当父类引用指向子类实例时,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法显示出的不同。
2.发生条件:1.必须有继承 2. 子类必须要对父类的方法进行重写
eg:
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";

}
}
class China extends Ren
{

function Say()
{

echo "你好";
}
}
$r=new Ren();//$r代表Ren的引用
$r1=new China();//$r1代表China的引用

二、函数重载:
1.概念:同一个函数名重写多个功能,根据所写的参数不同加载不同的功能
2.要求:1. 所写函数名一样 2. 参数的个数不同 3. 参数个数相同时,参数类型不同
eg:
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";

}
functin Say($a)
{

echo $a."Hello";
}
functin Say($a,$b)
{
echo $a.$b."Hello";
}

}
$r=new Ren();
//重载:
$r->Say();
$r->Say("a");
$r->Say("aa","bb");

附:php是弱类型语言,所以没有重载
php里面有可变参数的函数

三、__tostring()方法:
可以输出类的一些描述,它是在直接输出对象引用时自动调用的方法
class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
function __tostring()
{
echo "这个对象包含name和sex,一个Say方法";
}
}
$r=new Ren();
echo $r;
若不使用__tostring()方法,输出$r会报错:
Catchable fatal error: Object of class Ren could not be converted to string in C:\AppServ\www\Untitled-1.php on line 31
使用__tostring()方法后,输出:这个对象包含name和sex,一个Say方法

四、clone对象的克隆

class Ren
{
public $name;
public $sex;
function Say()
{
echo "Hello";
}
function __clone() //克隆对象时自动执行
{
$this->name="李四";//这里的$this指复本,克隆出的新对象
}
}
$r=new Ren();
$r->name="张三";
echo $r->name; //输出结果:张三
$r1=clone $r;
echo $r1->name; //输出结果:张三李四

时间: 2024-10-09 19:42:38

php 之 类,对象(三)多态性,函数重载,克隆的相关文章

0607pm克隆&引用类&加载类&面向对象串讲&函数重载

克隆class Ren{ public $name; public $sex; function __construct($n,$s) { $this->name=$n; $this->sex=$s; } function __clone()//改变克隆的对象内容 { $this->name="李思思";//this代表复本对象 $that->name="李思思";//that代表原本的,后来废弃了 }}$r=new Ren("张丹

c++中使用指针调用函数和使用指针调用类对象的()重载函数

使用函数指针时,指针可以像函数名一样,直接加括号和参数列表调用:也可先解引用再调用 1 1 //include directories... 2 2 using namespace std; 3 3 void testFun() 4 4 { 5 5 cout<<"this is a test"<<endl; 6 6 } 7 7 int main(int argc,char**argv) 8 8 { 9 9 auto *pFun=testFun; 10 10 pF

函数重载的总结

函数重载: 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数(overloaded function) 任何程序有且仅有一个main函数的实例,main函数不能重载. 函数重载和函数声明的区别: 如果两个函数声明的返回类型和形参表完全匹配,则将第二个声明视为第一个的重复声明.如果两个函数的形参表完全相同,但返回类型不同,则第二个声明是错误的.函数不能仅仅基于不同的返回类型而实现重载. 重载与作用域: 1 string init(); // the name init

小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助

小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧写一篇压压惊.把我文章抱走的同学留个言嘛. 函数在变成里面是一个非常重要的组成部分,那么这一部分我们先简单的介绍一下参数是如何传递进入函数,函数如何返回结果的.然后我们再来看看函数重载是个什么样的机制,最后在介绍一下所谓的函数指针到底是个什么东西.那么直接开始正题吧: 一.函数的参数传递 我们知道函

C++:基类与派生类对象之间的赋值兼容关系

4.5 基类与派生类对象之间的赋值兼容关系 在一定条件下,不同类型的数据之间可以进行类型转换,例如可以将整型数据赋给双精度型变量. 在赋值之前,先把整型数据转换为双精度型数据,然后再把它双精度型变量.这种不同类型之间的自动转换,称为赋值兼容.在基类和派生类对象之间也存在有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来代替.因为,通过公有继承,除了构造函数和析构函数外,派生类保留了基类其他的所有的成员.那么,派生类就具有基类的全部功能,凡

【C++】多态性(函数重载与虚函数)

多态性就是同一符号或名字在不同情况下具有不同解释的现象.多态性有两种表现形式: 编译时多态性:同一对象收到相同的消息却产生不同的函数调用,一般通过函数重载来实现,在编译时就实现了绑定,属于静态绑定. 运行时多态性:不同对象在收到相同消息时产生不同的动作,一般通过虚函数来实现,只有在运行时才能实现绑定,属于动态绑定. 虚函数 虚函数是在基类中用关键字virtual 标识的成员函数,可以在一个或多个派生类中被重新定义.如果一个函数被定义为虚函数,那么,即使是使用指向基类对象的指针来调用该成员函数,也

浅谈java中的对象、类、与方法的重载

对象: 一切皆为对象. 对象包括两部分内容:属性(名词形容词),行为(动词). 对象和对象之间是有关系的: 派生,关联,依赖. 类: 对同一类别的众多对象的一种抽象. 类,还是用来生成对象的一种模板,对象是类的一种具体化的表现. 面向对象的三大特性:封装,继承,多态. ? 1 2 3 4 class 类名{ 访问修饰符 成员变量的定义; 访问修饰符 成员函数(方法)的定义; } 访问修改符:默认不写,private,public. private,私有.只能被当前class 类名{}中的代码访问

C++基础知识 基类指针、虚函数、多态性、纯虚函数、虚析构

一.基类指针.派生类指针 父类指针可以new一个子类对象 二.虚函数 有没有一个解决方法,使我们只定义一个对象指针,就可以调用父类,以及各个子类的同名函数? 有解决方案,这个对象指针必须是一个父类类型,我们如果想通过一个父类指针调用父类.子类中的同名函数的话,这个函数是有要求的: 在父类中,eat函数声明之前必须要加virtual声明eat()函数为虚函数. 一旦某个函数被声明为虚函数,那么所有派生类(子类)中eat()函数都是虚函数. 为了避免你在子类中写错虚函数,在C++11中,你可以在函数

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

还是用一个例子来说明吧 1 #define unsigned int UINT32 2 3 class RMB 4 { 5 public: 6 RMB(UINT32 d, UINT32 c); 7 friend RMB operator +(RMB&, RMB&); 8 friend RMB& operator ++(RMB&); 9 void display() 10 { 11 cout<<(yuan + jf / 100.0)<<endl; 12