首页 > 后端开发 > 正文

php怎么方法重载

2024-09-03 02:24:01 | 我爱编程网

php怎么方法重载相关内容,小编在这里做了整理,希望能对大家有所帮助,关于php怎么方法重载信息,一起来了解一下吧!

本文目录一览:

php怎么方法重载

php怎么方法重载

php面向对象(OOP)编程完全教程:12.重载新的方法
在学习PHP 这种语言中你会发现, PHP中的方法是不能重载的, 所谓的方法重载就是定义相同的方法名,通过“参数的个数“不同或“参数的类型“不同,来访问我们的相同方法名的不同方法。但是因为PHP是弱类型的语言, 所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的。所以在PHP里面没有方法重载。不能重载也就是在你的项目中不能定义相同方法名的方法。另外,因为PHP没有名子空间的概念,在同一个页面和被包含的页面中不能定义相同名称的方法, 也不能定义和PHP给我提供的方法的方法重名,当然在同一个类中也不能定义相同名称的方法。
我们这里所指的重载新的方法所指的是什么呢?其实我们所说的重载新的方法就是子类覆盖父类的已有的方法,那为什么要这么做呢?父类的方法不是可以继承过来直接用吗?但有一些情况是我们必须要覆盖的,比如说我们前面提到过的例子里面, “Person”这个人类里面有一个“说话”的方法,所有继承“Person”类的子类都是可以“说话”的, 我们“Student”类就是“Person”类的子类,所以“Student”的实例就可以“说话“了, 但是人类里面“说话”的方法里面说出的是“Person”类里面的属性, 而“Student”类对“Person”类进行了扩展,又扩展出了几个新的属性,如果使用继承过来的“say()”说话方法的话,只能说出从“Person”类继承过来的那些属性,那么新扩展的那些属性使用这个继承过来的“say()”的方法就说不出来了,那有的人就问了,我在“Student”这个子类中再定义一个新的方法用于说话,说出子类里面所有的属性不就行了吗?一定不要这么做, 从抽象的角度来讲, 一个“学生”不能有两种“说话”的方法,就算你定义了两个不同的说话的方法,可以实现你想要的功能,被继承过来的那个“说话“方法可能没有机会用到了,而且是继承过来的你也删不掉。这个时候我们就要用到覆盖了。
虽然说在PHP里面不能定义同名的方法, 但是在父子关系的两个类中,我们可以在子类中定义和父类同名的方法,这样就把父类中继承过来的方法覆盖掉了。

代码
<?
//定义一个"人"类做为父类
class Person
{
//下面是人的成员属性
var $name; //人的名子
var $sex; //人的性别
var $age; //人的年龄

//定义一个构造方法参数为属性姓名$name、性别$sex和年龄$age进行赋值
function __construct($name, $sex, $age)
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}

//这个人可以说话的方法, 说出自己的属性
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age;
}
}

class Student extends Person
{

var $school; //学生所在学校的属性

//这个学生学习的方法
function study()
{
echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";
}

//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法
function say()
{
echo "我的名子叫:".$this->name." 性别:".$this->sex." 我的年龄是:".$this->age."我在".$this->school."上学;
}

}
?>

上面的例子, 我们就在“Student”子类里覆盖了继承父类里面的”say()”的方法,通过覆盖我们就实现了对“方法”扩展。
但是,像这样做虽然解决了我们上面说的问题,但是在实际开发中,一个方法不可能就一条代码或是几条代码,比如说“Person”类里面的“say()”方法有里面有100条代码,如果我们想对这个方法覆盖保留原有的功能外加上一点点功能,就要把原有的100条代码重写一次, 再加上扩展的几条代码,这还算是好的,而有的情况,父类中的方法是看不见原代码的,这个时候你怎么去重写原有的代码呢?我们也有解决的办法,就是在子类这个方法中可以调用到父类中被覆盖的方法, 也就是把被覆盖的方法原有的功能拿过来再加上自己的一点功能,可以通过两种方法实现在子类的方法中调用父类被覆盖的方法:
一种是使用父类的“类名::“来调用父类中被覆盖的方法;
一种是使用“parent::”的方试来调用父类中被覆盖的方法;

代码
class Student extends Person
{
var $school; //学生所在学校的属性

//这个学生学习的方法
function study()
{
echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";
}

//这个学性可以说话的方法, 说出自己所有的属性,覆盖了父类的同名方法
function say()
{
//使用父类的"类名::"来调用父类中被覆盖的方法;
// Person::say();

//或者使用"parent::"的方试来调用父类中被覆盖的方法;
parent::say();

//加上一点自己的功能
echo "我的年龄是:".$this->age."我在".$this->school."上学.";
}
}

现在用两种方式都可以访问到父类中被覆盖的方法,我们选那种方式最好呢?用户可能会发现自己写的代码访问了父类的变量和函数。如果子类非常精炼或者父类非常专业化的时候尤其是这样。 不要用代码中父类文字上的名字,应该用特殊的名字 parent,它指的就是子类在 extends 声明中所指的父类的名字。这样做可以避免在多个地方使用父类的名字。如果继承树在实现的过程中要修改,只要简单地修改类中 extends 声明的部分。
同样,构造方法在子类中如果没有声明的话,也可以使用父类中的构造方法,如果子类中重新定义了一个构造方法也会覆盖掉父类中的构造方法,如果想使用新的构造方法为所有属性赋值也可以用同样的方式。

代码
class Student extends Person
{

var $school; //学生所在学校的属性

function __construct($name, $sex, $age, $school)
{
//使用父类中的方法为原有的属性赋值
parent::__construct($name, $sex, $age);
$this->school=$school;
}

//这个学生学习的方法
function study()
{
echo "我的名子叫:".$this->name." 我正在".$this->school." 学习";
}

//这个人可以说话的方法, 说出自己的属性
function say()
{
parent::say();
//加上一点自己的功能
echo "我的年龄是:".$this->age."我在".$this->school."上学.";
}

}

php怎么方法重载

php中自定义函数正确的语句是

像数学中的函数一样,y=f(x)是函数基本的表达形式,x可看做是参数,y可看做是返回值,即函数定义就是一个被命名的、独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值。

自定义函数 函数的声明

在编写程序的过程中,我们会经常碰到某些功能模块在PHP中没有提供系统函数,这样就需要我们自己定义函数,即自定义函数,自定义函数的规则如下:

  • 每个函数的第一行都是函数头,由声明函数的关键字function、函数名和参数列表三部分组成。

  • 每个自定义函数都必须使用function关键字声明。

  • 函数名可以代表整个函数,可以将函数命名为任何名称,只要遵循变量名的命名规则即可。但函数名称必须唯一,且不能与系统函数重名。

  • 声明函数时函数名后面的花括号也是必须有的,在花括号中表明了一组可以接受的参数列表,参数就是声明的变量,然后在调用函数时传递给它值。参数列表可以没有,也可以有—个或多个参数,多个参数使用逗号分隔。

  • 函数体位于函数头后面,用花括号括起来。函数被调用后,执行到retun语句或最外面的花括号后结束,返回到调用的程序。

  • 使用关键字return可以从函数中返回一个值,然后返回到调用程序处继续执行。

  • Demo
  • <?php

    /* 将使用双层for循环输出表格的代码声明为函数,函数名为table */

    functiontable(){

    echo"<table align='center' border='1' width='600'>";

    for(out=0;out<10;out++){

    bgcolor=out%2==0?"red":"blue";//各行换背景色

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<10;in++){

    echo"<td>".(out*10+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    函数的调用

    不管是自定义的函数还是系统函数,如果函数不被调用,就不会执行。函数被调用后开始执行函数体中的代码,执行完毕返回到调用的位置继续向下执行。调用规则如下:

  • 通过函数名称去调用函数。

  • 如果函数有参数列表,还可以通过函数名后面的圆括号传入对应的值给参数,在函数体中使用参数来改变函数内部代码的执行行为。

  • 如果函数有返回值,当函数执行完毕时就会将return后面的值返回到调用函数的位置处。

  • Demo
  • <?php

    /* 将使用双层for循环输出表格的代码声明为函数,函数名为table */

    functiontable(){

    echo"<table align='center' border='1' width='600'>";

    for(out=0;out<10;out++){

    bgcolor=out%2==0?"red":"blue";//各行换背景色

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<10;in++){

    echo"<td>".(out*10+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    <?php

    table();

    ?>

    函数的参数

    参数列表是由零个、一个或多个参数组成的。每个参数是一个表达式,用逗号分隔。对于有参函数,在PHP脚本程序中和被调用函数之间有数据传递关系。定义函数时函数名后面括号内的表达式称为形式参数(简称“形参”),被调用函数名后面括号中的表达式称为实际参数(简称“实参”),实参和形参需要接顺序对应传递数据。如果函数没有参数列表,函数执行的任务就是固定的,用户在调用函数时不能改变函数内部的一些执行行为。

    Demo

    <?php

    /**

    自定义函数table()时,声明三个参数,参数之间使用逗号分隔

    @paramstringtableName 需要一个字符串类型的表名

    @paramintrows 需要一个整型数值设置表格的行数

    @paramintcols 需要另一个整型值设置表格的列数

    */

    functiontable(tableName,rows,cols){

    echo"<table align='center' border='1' width='600'>";

    echo"<caption><h1>tableName</h1></caption>";

    for(out=0;out<rows;out++){//使用第二个参数rows指定表行数

    bgcolor=out%2==0?"red":"blue";

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<cols;in++){//使用第三个参数cols指定表列数

    echo"<td>".(out*cols+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    }

    ?>

    <?php

    table("千度的表格",10,10);

    ?>

    函数的返回值

    函数的返回值是函数执行的结果,调用函数的脚本程序不能直接使用函数体里面的信息,但可以通过关键字return向调用者传递数据。return语句注意点如下:

  • return语句可以向函数调用者返回函数体中任意执行结果值。

  • 在函数体中如果执行了return语句,它后面的语句就不会被执行。

  • Demo
  • <?php

    /**

    自定义函数table()时,声明三个参数,参数之间使用逗号分隔

    @paramstringtableName 需要一个字符串类型的表名

    @paramintrows 需要一个整型数值设置表格的行数

    @paramintcols 需要另一个整型值设置表格的列数

    */

    functiontable(tableName,rows,cols){

    returnStr="这是返回的字符串";

    echo"<table align='center' border='1' width='600'>";

    echo"<caption><h1>tableName</h1></caption>"; 我爱编程网

    for(out=0;out<rows;out++){//使用第二个参数rows指定表行数

    bgcolor=out%2==0?"red":"blue";

    echo"<tr bgcolor=".bgcolor.">";

    for(in=0;in<cols;in++){//使用第三个参数cols指定表列数

    echo"<td>".(out*cols+in)."</td>";

    }

    echo"</tr>";

    }

    echo"</table>";

    returnreturnStr;

    }

    ?>

    <?php

    echotable("千度的表格",10,10);

    ?>

php怎么方法重载

php用户重名检测的问题!! 代码如下 那位大侠帮我看看错在哪里啊?

我爱编程网(https://www.52biancheng.com)小编还为大家带来php用户重名检测的问题!! 代码如下 那位大侠帮我看看错在哪里啊?的相关内容。

代码原理有问题。先插入后读取。
即使不考虑原理问题,那么假设原来存在,插入失败,读取结果为有。假设不存在,插入成功,读取结果还是有。
原理如果修正,应该先读取后插入。即使这样,你的原理本来的问题在于,如果两个用户同时提交相同的名字,可能都能通过读取,然后才分别执行插入,导致第一个用户的资料被覆盖掉。
这里提供两个可行的原理:
1.用户名字段设置为UNIQUE KEY,那么插入失败的mysql_query将直接返回FALSE表示已经存在。
2.在mysql_query插入之后,执行mysql_affected_rows,如果得到1,就是插入成功。
这两个原理都不需要预先检查。简单地说,就是把“插入”和“检查”两个东西在同一条SQL中实现,这样得到的结果可以避免“两个用户同时提交什么”的问题

以上就是php怎么方法重载全部内容了,了解更多相关信息,关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“php怎么方法重载”相关推荐
解决win8.1正式版中Java程序无法运行的方法 Java编写程序实现方法重载。
解决win8.1正式版中Java程序无法运行的方法 Java编写程序实现方法重载。

解决win8.1正式版中Java程序无法运行的方法解决win8.1正式版中Java程序无法运行的方法分享给大家,JAVA,一种可以撰写跨平台应用软件的面向对象的程序设计语言,在win8.1系统下,有用户在使用Java时,页面上出现空白和黑色叉叉,有时候甚至无法运行,这是怎回事呢?对于刚安装win8.1系统的新用户来说,一切都是陌生又措手不及的,因此小编下面就来教教大家如何

2024-06-14 08:52:01
PHP类方法重写原则是什么
PHP类方法重写原则是什么

php方法重写和多态的区别重写是多态实现方法的一种,多态的实现方法包括但不局限于重写,二者不是并列关系!多态是一种思想,重写是一种方法!换句话说,只会执行子类,不会执行父类。如果一定要执行父类,那么就要用到关键词parent。PHP类方法重写原则是什么PHP类方法重写原则:1、final修饰的类方法不可被子类重写;2、PHP是否重写父类方法只会根据方法名是否一致判断;3、重写时访

2024-07-20 22:17:34
怎么解决win10无法加载java插件 win10无法加载java插件解决方法【详细步骤】
怎么解决win10无法加载java插件 win10无法加载java插件解决方法【详细步骤】

win1064位系统IE11无法加载Java插件,弹窗点击后出现错误。已按网上方法调整多次均不成功!!!被jdk高版本安全性能阻止解决如下:1.安装jre8(保证控制面板有Java图标)2.安装jre7(jre6可有可无)3.卸载jre8注明:jre8生成图标,6或7不能生成,卸载jre8后,保留jre7仍然可以保留图标,再卸载jre7后图标消失。最后安全阻止消

2024-05-09 16:44:35
PHP FTPPHP FTP 函数 php下载图片的三种方式(php下载图片的方法)
PHP FTPPHP FTP 函数 php下载图片的三种方式(php下载图片的方法)

PHPFTPPHPFTP函数PHP提供了一系列FTP函数,用于与FTP服务器进行交互。这些函数在不同版本的PHP中开始被支持,下面是其中的部分主要函数及其功能概述:1.ftp_alloc():为即将上传的文件在FTP服务器上分配空间,确保上传过程顺利进行。2.ftp_cdup():用于将当前目录切换到FTP服务器的父目录,便于导航。3.ftp_c

2024-11-26 20:51:33
php的imagepng函数 php下载图片的三种方式(php下载图片的方法)
php的imagepng函数 php下载图片的三种方式(php下载图片的方法)

php图象处理函数imagestring函数的运用可以用imagettftext来生成,支持truetype字体arrayimagettftext(resourceimage,floatsize,floatangle,intx,inty,intcolor,stringfontfile,stringtext)image图像资源。见imagecreatetruecolor()。

2024-12-29 12:36:54
php文件怎么下载?
php文件怎么下载?

php视频教程网盘链接:提取码: c9fj《PHP自学视频教程》   分3篇共22章,其中,第1篇为入门篇,主要包括了解PHP、PHP开发环境搭建、PHP开发基础、PHP流程控制语句、函数、字符串操作、正则表达式、PHP数组、PHP与Web页面交互、日期和时间等内容;第2篇为提高篇,主要包括MySQL数据库设计、PHP操作MySQL数据库、Cookie和Session、图形图像

2024-10-04 09:12:15
java线程怎么run方法内添加方法
java线程怎么run方法内添加方法

Java线程中run和start方法的区别区别:调用start方法实现多线程,而调用run方法没有实现多线程Start:用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这

2024-05-31 05:49:40
PHP 静态方法怎么调用父类非静态方法
PHP 静态方法怎么调用父类非静态方法

php直接用类名调用静态方法会不会触发类的构造函数调用静态方法与触发类的构造函数没有必然关系。但是静态方法可以实例化类本身,这时候会触发构造函数,而且可以传参数。如:class classname{    private function __construct($a){        $this-&gt;a = $a;        exit($this-&gt;a);//打印一下    

2024-07-24 18:21:44