Jadual Kandungan
在PHP中模拟一般面向对象语言中的方法重载(overload)" >在PHP中模拟一般面向对象语言中的方法重载(overload)
利用PHP的重载(overloading)技术,实现一般面向对象语言中的方法重载(overload)" >利用PHP的重载(overloading)技术,实现一般面向对象语言中的方法重载(overload)
Rumah pembangunan bahagian belakang tutorial php PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload)

PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload)

Mar 25, 2017 am 10:08 AM

  在一般的面向对象设计语言(如C++,Java)中的方法重载就是定义相同的方法名,通过“参数的个数”不同或“参数的类型”不同,来访问我们的相同方法名的不同方法。但是PHP 中,方法是不能重载的,因为PHP 是弱类型的语言,所以在方法的参数中本身就可以接收不同类型的数据,又因为PHP 的方法可以接收不定个数的参数,所以通过传递不同个数的参数调用不相同方法名的不同方法也是不成立的。所以在PHP 里面没有传统上的重载(overload)方法,但由于php其灵活性,可以模拟一般面向对象语言中的重载方法。

在PHP中模拟一般面向对象语言中的方法重载(overload)

首先来看一个例子:

<?php  /*
重写/覆盖  override  指:子类重写了父类的同名方法  
重载: overload  指:存在多个同名方法,但参数类型/个数不同. 传不同的参数,调用不同的方法。  
但是在PHP中,不允许存在多个同名方法。 因此,不能够完成java,c++中的这种重载。  
但是,PHP的灵活,能达到类似的效果 
*/   //在PHP中模拟重载的方法  class Calc {   
    public function area() {   //求面积
        // 判断一个调用area时,得到的参数个数   
        $args = func_get_args();   
        if(count($args) == 1) {   //只有一个参数
            return 3.14 * $args[0] * $args[0];   //求圆的面积 
        } else if(count($args) == 2) {   //有2个参数
            return $args[0] * $args[1];   //求矩形的面积
        } else {   
            return &#39;未知图形&#39;;   
        }   
    }   
}   

$calc = new Calc();   
// 计算圆的面积  echo $calc->area(10),&#39;<br />&#39;;   
// 计算矩形的面积   echo $calc->area(5,8);  
?>
Salin selepas log masuk

利用PHP的重载(overloading)技术,实现一般面向对象语言中的方法重载(overload)

  下面的例子是利用利用PHP的重载(overloading)技术,使用魔术方法,来实现传统上的方法重载(overload)。 

 关于PHP中的重载技术,请参考:PHP面向对象_重载(overloading)

例子:

<?php/*
目标:设计一个类,这个类的实例,可以实现如下需求:
调用方法f1:
传入1个参数,就返回其本身,
传入2个参数,就求其平方和,
传入3个参数,就求其立方和,
其他参数形式,会报错!
*/class A{
    //这是一个魔术方法,在A的对象调用不存在的方法时
    //会被自动调用来应对这种情况
    function call($Func_name, $argument){
        //使用f1不存在的情况    
        if($Func_name === &#39;f1&#39;){            
        $len = count($argument); //获得实参的个数
            if($len<1 || $len>3){
                trigger_error("参数数量有误!", E_USER_ERROR); 
            }else if($len == 1){                
            return $argument[0];   
            }else if($len == 2){                
            return $argument[0]*$argument[0] + $argument[1]*$argument[1]; 
            }else if($len == 3){                
            $v1 = $argument[0];                
            $v2 = $argument[1];                
            $v3 = $argument[2];                
            return $v1*$v1*$v1 + pow($v2, 3) + pow($v3, 3);
            }
        }else if($Func_name === &#39;f2&#39;){ //另一个不存在的方法

        }else if($Func_name === &#39;f3&#39;){ //......

        }
    }
}$a = new A();$v1 = $a->f1(1);$v2 = $a->f1(2,3);$v3 = $a->f1(4,5,6);echo "v1= $v1, v2 = $v2, v3 = $v3";?>
Salin selepas log masuk

运行结果为:

v1= 1, v2 = 13, v3 = 405
Salin selepas log masuk

Atas ialah kandungan terperinci PHP面向对象-详细介绍模拟一般面向对象语言中的方法重载(overload) . Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

CakePHP Bekerja dengan Pangkalan Data CakePHP Bekerja dengan Pangkalan Data Sep 10, 2024 pm 05:25 PM

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Pembalakan CakePHP Pembalakan CakePHP Sep 10, 2024 pm 05:26 PM

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

See all articles