Penggunaan fungsi OVERLOADED pada PHP

Dalam PHP, apa yang Anda maksud dengan overloading fungsi dan overriding fungsi. dan apa perbedaan keduanya? tidak tahu apa perbedaan di antara mereka.

Overloading adalah mendefinisikan fungsi yang memiliki tanda tangan yang serupa, namun memiliki parameter yang berbeda. Overriding hanya berkaitan dengan kelas turunan, di mana kelas induk telah mendefinisikan metode dan kelas turunan ingin menimpa metode itu.

Di PHP, Anda hanya bisa membebani metode menggunakan metode ajaib __call .

Contoh mengesampingkan:


Kelebihan fungsi terjadi ketika Anda menetapkan nama fungsi yang sama dua kali [atau lebih] menggunakan serangkaian parameter yang berbeda. Sebagai contoh:

class Addition {
  function compute[$first, $second] {
    return $first+$second;
  }

  function compute[$first, $second, $third] {
    return $first+$second+$third;
  }
}

Pada contoh di atas, fungsi compute kelebihan beban dengan dua tanda tangan parameter yang berbeda. * Ini belum didukung di PHP. Alternatifnya adalah dengan menggunakan argumen opsional:

class Addition {
  function compute[$first, $second, $third = 0] {
    return $first+$second+$third;
  }
}

Fungsi penimpaan terjadi ketika Anda memperluas kelas dan menulis ulang fungsi yang ada di kelas induk:

class Substraction extends Addition {
  function compute[$first, $second, $third = 0] {
    return $first-$second-$third;
  }
}

Sebagai contoh, compute mengesampingkan perilaku yang ditetapkan dalam Addition.

Sebenarnya, tidak ada perbedaan, karena Anda tidak dapat melakukan keduanya :]

Fungsi overriding bisa dilakukan dengan ekstensi PHP seperti APD, tetapi sudah usang dan afaik versi terakhir tidak dapat digunakan.

Fungsi overloading di PHP tidak dapat dilakukan karena pengetikan dinamis, yaitu, dalam PHP Anda tidak "mendefinisikan" variabel menjadi tipe tertentu. Contoh:

$a=1;
$a='1';
$a=true;
$a=doSomething[];

Setiap variabel memiliki tipe yang berbeda, namun Anda dapat mengetahui jenisnya sebelum dieksekusi [lihat yang keempat] ..__ Sebagai perbandingan, bahasa lain menggunakan:

int a=1;
String s="1";
bool a=true;
something a=doSomething[];

Dalam contoh terakhir, Anda harus secara paksa mengatur tipe variabel [sebagai contoh, saya menggunakan tipe data "sesuatu"].

"Masalah" lain mengapa kelebihan fungsi tidak dimungkinkan dalam PHP: PHP memiliki fungsi yang disebut func_get_args [], yang mengembalikan array argumen saat ini, sekarang pertimbangkan kode berikut:

function hello[$a]{
  print_r[func_get_args[]];
}

function hello[$a,$a]{
  print_r[func_get_args[]];
}

hello['a'];
hello['a','b'];

Mempertimbangkan kedua fungsi menerima sejumlah argumen, mana yang harus dipilih oleh kompiler?

Akhirnya, saya ingin menunjukkan mengapa jawaban di atas sebagian salah; function overloading/overriding TIDAK sama dengan method overloading/overriding.

Di mana metode seperti fungsi tetapi khusus untuk kelas, dalam hal ini, PHP memungkinkan mengesampingkan di kelas, tetapi sekali lagi tidak ada kelebihan, karena semantik bahasa.

Untuk menyimpulkan, bahasa seperti Javascript memungkinkan penggantian [tapi sekali lagi, tidak ada pembebanan berlebihan], namun mereka juga dapat menunjukkan perbedaan antara menimpa fungsi pengguna dan metode:

/// Function Overriding ///

function a[]{
   alert['a'];
}
a=function[]{
   alert['b'];
}

a[]; // shows popup with 'b'


/// Method Overriding ///

var a={
  "a":function[]{
    alert['a'];
  }
}
a.a=function[]{
   alert['b'];
}

a.a[]; // shows popup with 'b'

Contoh overloading

class overload {
    public $name;
    public function __construct[$agr] {
        $this->name = $agr;
    }
    public function __call[$methodname, $agrument] {
         if[$methodname == 'sum2'] {

          if[count[$agrument] == 2] {
              $this->sum[$agrument[0], $agrument[1]];
          }
          if[count[$agrument] == 3] {

              echo $this->sum1[$agrument[0], $agrument[1], $agrument[2]];
          }
        }
    }
    public function sum[$a, $b] {
        return $a + $b;
    }
    public function sum1[$a,$b,$c] {

        return $a + $b + $c;
    }
}
$object = new overload['Sum'];
echo $object->sum2[1,2,3];

Meskipun paradigma overloading tidak sepenuhnya didukung oleh PHP efek yang sama [atau sangat mirip] dapat dicapai dengan parameter default [seperti yang disebutkan sebelumnya].

Jika Anda mendefinisikan fungsi Anda seperti ini:

function f[$p=0]
{
  if[$p]
  {
    //implement functionality #1 here
  }
  else
  {
    //implement functionality #2 here
  }
}

Ketika Anda memanggil fungsi ini seperti:

f[];

anda akan mendapatkan satu fungsionalitas [# 1], tetapi jika Anda menyebutnya dengan parameter seperti:

f[1];

anda akan mendapatkan fungsionalitas lain [# 2]. Itulah efek kelebihan beban - fungsionalitas yang berbeda tergantung pada parameter input fungsi.

Saya tahu, seseorang akan bertanya sekarang fungsi apa yang akan didapat jika dia memanggil fungsi ini sebagai f [0].

Saya ingin menunjukkan di sini bahwa Overloading di PHP memiliki arti yang sangat berbeda dibandingkan dengan bahasa pemrograman lainnya. Banyak orang mengatakan bahwa overloading tidak didukung di PHP dan oleh definisi konvensional overloading, ya fungsionalitas itu tidak tersedia secara eksplisit. 

Namun, definisi kelebihan muatan yang benar di PHP sama sekali berbeda. 

Dalam PHP overloading mengacu pada pembuatan properti dan metode secara dinamis menggunakan metode ajaib seperti __set [] dan __get []. Metode kelebihan ini dipanggil ketika berinteraksi dengan metode atau properti yang tidak dapat diakses atau tidak dideklarasikan. 

Berikut ini tautan dari manual PHP: //www.php.net/manual/en/language.oop5.overloading.php

Overloading: Dalam dunia nyata, overloading berarti menugaskan beberapa hal tambahan kepada seseorang. Seperti di dunia nyata Overloading di PHP berarti memanggil fungsi tambahan. Dengan kata lain, Anda dapat mengatakan itu memiliki fungsi yang lebih ramping dengan parameter yang berbeda. Di PHP Anda dapat menggunakan overloading dengan fungsi sulap, mis. __dapatkan, __set, __call dll.

Contoh Overloading:  

class Shape {
   const Pi = 3.142 ;  // constant value
  function __call[$functionname, $argument]{
    if[$functionname == 'area']
    switch[count[$argument]]{
        case 0 : return 0 ;
        case 1 : return self::Pi * $argument[0] ; // 3.14 * 5
        case 2 : return $argument[0] * $argument[1];  // 5 * 10
    }

  }

 }
 $circle = new Shape[];`enter code here`
 echo "Area of circle:".$circle->area[]."
"; // display the area of circle Output 0 echo "Area of circle:".$circle->area[5]."
"; // display the area of circle $rect = new Shape[]; echo "Area of rectangle:".$rect->area[5,10]; // display area of rectangle

Mengesampingkan: Mengesampingkan pemrograman berorientasi objek adalah untuk menggantikan metode induk di kelas anak. Dalam mengesampingkan Anda dapat menyatakan kembali metode kelas induk di kelas anak. Jadi, pada dasarnya tujuan dari mengganti adalah untuk mengubah perilaku metode kelas induk Anda.

Contoh penggantian:

class parent_class
{

  public function text[]    //text[] is a parent class method
  {
    echo "Hello!! everyone I am parent class text method"."
"; } public function test[] { echo "Hello!! I am second method of parent class"."
"; } } class child extends parent_class { public function text[] // Text[] parent class method which is override by child class { echo "Hello!! Everyone i am child class"; } } $obj= new parent_class[]; $obj->text[]; // display the parent class method echo $obj= new parent_class[]; $obj->test[]; $obj= new child[]; $obj->text[]; // display the child class method echo

Ada beberapa perbedaan antara Function overloading & overriding meskipun keduanya berisi nama fungsi yang sama. Dalam overloading, antara fungsi nama yang sama mengandung berbagai jenis argumen atau tipe pengembalian; Seperti: "function add [int a, int b]" & "function add [float a, float b]; Di sini fungsi add [] kelebihan beban . Dalam kasus meng-override baik argumen dan nama fungsi adalah sama.Hal ini umumnya ditemukan dalam warisan atau sifat-sifat.Kami harus mengikuti beberapa taktik untuk memperkenalkan, fungsi apa yang akan dijalankan sekarang ... Jadi, dalam mengesampingkan programmer mengikuti beberapa taktik untuk menjalankan fungsi yang diinginkan di mana dalam kelebihan beban program dapat secara otomatis mengidentifikasi fungsi yang diinginkan ... Terima kasih!

Bài mới nhất

Chủ Đề