Rumah pembangunan bahagian belakang tutorial php php之重载__get __set isset unset __call __callStatic python static method import static import区别 gcc static 链接静态库

php之重载__get __set isset unset __call __callStatic python static method import static import区别 gcc static 链接静态库

Jul 29, 2016 am 08:53 AM
static

php中的overloading跟传统面向对象的重写不同,例如java中:

<code>class A{

  public void  methodName(参数<span>1</span>);
  public void  methodName(参数<span>1</span>,参数<span>2</span>);
  public void  methodName(参数<span>1</span>,参数<span>2</span>,参数<span>3</span>);
  <span>...</span>}</code>
Salin selepas log masuk

php中重载是对类或者对象调用不存在的属性或方法时一种“优雅”的错误处理机制。想不明白为什么PHP这也叫重载,跟传统面向对象编程中的重载可以说是风马牛不相及。
php的重载依靠魔术方法__get() __set() isset() unset() __call() __callStatic()来实现,在我们访问不存在的属性或者方法时候,系统会自动调用这些魔术方法。

代码:

<code><span><span><?php </span>
header(<span>"content-type:text/html;charset=utf-8"</span>);

<span><span>class</span><span>Sample</span>{</span><span>public</span><span>$p1</span> = <span>1</span>;<span>//类中声明的属性p1</span><span>//保存被重载的数据</span><span>private</span><span>$data</span> = <span>array</span>(); 

 <span>/*
   在访问对象不存在的属性时__get被调用
   $name:变量名
  */</span><span><span>function</span><span>__get</span><span>(<span>$name</span>)</span>
  {</span><span>"<br>__get:: "</span>.<span>$name</span>;
    <span>if</span>(array_key_exists(<span>$name</span>, <span>$this</span>->data)){
        <span>return</span><span>$this</span>->data[<span>$name</span>];
    }

    <span>$trace</span> = debug_backtrace();
    trigger_error(
        <span>'访问类中不存在的属性'</span>.<span>$name</span>.
        <span>' 文件:'</span>.<span>$trace</span>[<span>0</span>][<span>'file'</span>].
        <span>' 所在行'</span>.<span>$trace</span>[<span>0</span>][<span>'line'</span>]
        ,E_USER_WARNING);
    <span>return</span><span>null</span>;

  }

  <span>/*
   对象不存在的属性赋值时__set被调用
   $name:变量名
   $value:变量值
  */</span><span><span>function</span><span>__set</span><span>(<span>$name</span>,<span>$value</span>)</span>{</span><span>echo</span><span>"<br> __set:: $name = $value "</span>;
     <span>$this</span>->data[<span>$name</span>] = <span>$value</span>;

  }

  <span>/*
   对象不存在的属性使用isset()或empty() 时__isset被调用
   $name:变量名
   $value:变量值
  */</span><span><span>function</span><span>__isset</span><span>(<span>$name</span>)</span>{</span><span>echo</span><span>"<br>isset::  $name "</span>;
    <span>return</span><span>isset</span>(<span>$this</span>->data[<span>$name</span>]);
  }


  <span>/*
   对象不存在的属性使用unset()时被调用
   $name:变量名
   $value:变量值
  */</span><span><span>function</span><span>__unset</span><span>(<span>$name</span>)</span>{</span><span>echo</span><span>"<br>__unset::  $name"</span>;
    <span>unset</span>(<span>$this</span>->data[<span>$name</span>]);
  }

  <span>/*
    类的对象的不存在的实例方法调用的时候,会自动调用本方法,该方法必须是public
   */</span><span>public</span><span><span>function</span><span>__call</span><span>(<span>$name</span> , <span>$arguments</span>)</span>{</span><span>if</span>(<span>$name</span>===<span>'f1'</span>){
        <span>echo</span><span>"<br>"</span>.<span>$name</span>.<span>"方法被调用,"</span>.<span>"参数:"</span>;
        var_dump(<span>$arguments</span>);
    }<span>else</span><span>if</span>(<span>$name</span>===<span>'f2'</span>){
        <span>echo</span><span>"<br>"</span>.<span>$name</span>.<span>"方法被调用,"</span>.<span>"参数:"</span>;
        var_dump(<span>$arguments</span>);
    }<span>else</span>{

        trigger_error(<span>"非法调用!"</span>,E_USER_WARNING);
    }

  }

  <span>/*
     类的对象的不存在的静态方法调用的时候,会自动调用本方法
     5.3.0 新增 __callStatic()魔术方法。可见性未设置为 public 或未声明为 static 的时候会产生一个警告 
   */</span><span>public</span><span>static</span><span><span>function</span><span>__callStatic</span><span>(<span>$name</span> , <span>$arguments</span>)</span>{</span><span>echo</span><span>"<br>"</span>.<span>$name</span>.<span>"静态方法被调用,"</span>.<span>"参数:"</span>;
        var_dump(<span>$arguments</span>);

  }

 }


<span>$s</span> = <span>new</span> Sample();

<span>echo</span><span>"<br>访问类中存在的实例属性:s->p1:: "</span>.<span>$s</span>->p1;


<span>//属性重载只能在对象中进行。在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被 声明为 static。从 PHP 5.3.0 起, 将这些魔术方法定义为 static 会产生一个警告。</span><span>//Fatal error: Access to undeclared static property: Sample::$p3</span><span>//echo "<br>访问类中不存在的静态属性不会调用魔术方法__get:".Sample::$p3;//错误</span><span>//访问类中不存在的属性,类中的魔术方法__get会被调用</span><span>echo</span><span>$s</span>->p2;

<span>//给类中不存在的属性赋值,类中的魔术方法__set会被调用</span><span>$s</span>->p2 = <span>88</span>;

<span>echo</span><span>'<br>'</span>.<span>$s</span>->p2; <span>//输出 88</span><span>//类中的魔术方法__isset会被调用</span>
var_dump(<span>isset</span>(<span>$s</span>->p2));
<span>//类中的魔术方法__isset会被调用</span>
var_dump(<span>empty</span>(<span>$s</span>->p2));

<span>//类中的魔术方法__unset会被调用</span><span>unset</span>(<span>$s</span>->p2);


<span>echo</span><span>'<br>'</span>.<span>$s</span>->p2; <span>//p2被销毁,报错</span><span>$s</span>->f1();
<span>$s</span>->f1(<span>1</span>,<span>2</span>);
<span>$s</span>->f1(<span>1</span>,<span>2</span>,<span>"hello"</span>);

<span>$s</span>->f2(<span>true</span>,<span>"111"</span>);

<span>$s</span>->f3();

<span>//调用对象不存在的静态方法</span>
Sample::say(<span>'hello'</span>);
Sample::say(<span>'hello'</span>,<span>'php'</span>);

<span>?></span></span></span></code>
Salin selepas log masuk

static的作用,static electricity,static c语言,static 函数,java static,python static method,import static import区别,gcc static 链接静态库

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了php之重载__get __set isset unset __call __callStatic,包括了static方面的内容,希望对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.

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)

Apakah fungsi dan penggunaan statik dalam bahasa C Apakah fungsi dan penggunaan statik dalam bahasa C Jan 31, 2024 pm 01:59 PM

Peranan dan penggunaan statik dalam bahasa C: 1. Skop pembolehubah; 3. Fungsi dalaman 4. Ubah suai fungsi; Jika terdapat kata kunci statik di hadapan pembolehubah, maka skop pembolehubah adalah terhad kepada fail di mana ia diisytiharkan Dalam erti kata lain, pembolehubah adalah "skop peringkat fail", yang sangat berguna untuk mencegah masalah "definisi pendua" pembolehubah; 2. Kitaran hayat, pembolehubah statik dimulakan sekali apabila program mula dilaksanakan, dan dimusnahkan apabila program tamat, dsb.

Cara menggunakan statik, ini, super, dan akhir di Jawa Cara menggunakan statik, ini, super, dan akhir di Jawa Apr 18, 2023 pm 03:40 PM

1. statik Sila lihat program berikut dahulu: publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} Pernah melihat ini Program segmen biasa kepada kebanyakan orang yang telah mempelajari Java. Walaupun anda belum mempelajari Java tetapi telah mempelajari bahasa peringkat tinggi yang lain, seperti C, anda seharusnya dapat memahami maksud kod ini. Ia hanya mengeluarkan "Hello, dunia" dan tidak mempunyai kegunaan lain Walau bagaimanapun, ia menunjukkan tujuan utama kata kunci statik.

Senario aplikasi praktikal dan kemahiran penggunaan kata kunci statik dalam bahasa C Senario aplikasi praktikal dan kemahiran penggunaan kata kunci statik dalam bahasa C Feb 21, 2024 pm 07:21 PM

Senario aplikasi praktikal dan kemahiran penggunaan kata kunci statik dalam bahasa C 1. Gambaran keseluruhan statik ialah kata kunci dalam bahasa C, digunakan untuk mengubah suai pembolehubah dan fungsi. Fungsinya adalah untuk mengubah kitaran hayat dan keterlihatannya semasa program berjalan, menjadikan pembolehubah dan fungsi statik. Artikel ini akan memperkenalkan senario aplikasi praktikal dan teknik penggunaan kata kunci statik, dan menggambarkannya melalui contoh kod tertentu. 2. Pembolehubah statik memanjangkan kitaran hayat pembolehubah Menggunakan kata kunci statik untuk mengubah suai pembolehubah tempatan boleh memanjangkan kitaran hayatnya.

Peranan statik Peranan statik Jan 24, 2024 pm 04:08 PM

Fungsi statik: 1. Pembolehubah; 3. Kegunaan lain 5. Pengoptimuman prestasi; Pengoptimuman Reka Letak Memori; 11. Elakkan pemulaan berulang; Pengenalan terperinci: 1. Pembolehubah, pembolehubah statik Apabila pembolehubah diisytiharkan sebagai statik, ia tergolong dalam peringkat kelas, bukan peringkat contoh, yang bermaksud bahawa tidak kira berapa banyak objek yang dicipta, hanya satu pembolehubah statik wujud, dan semua objek. kongsi pembolehubah Statik ini dan sebagainya.

Cara menggunakan pengubah suai Java abstrak, statik dan muktamad Cara menggunakan pengubah suai Java abstrak, statik dan muktamad Apr 26, 2023 am 09:46 AM

Abstrak pengubah suai (abstrak) 1. Abstrak boleh mengubah suai kelas (1) Kelas yang diubah suai oleh abstrak dipanggil kelas abstrak (2) Sintaks: nama kelas abstractclass {} (3) Ciri: Kelas abstrak tidak boleh mencipta objek secara berasingan, tetapi mereka boleh diisytiharkan Rujukan nama rujukan kelas abstrak; (4) Kelas abstrak boleh mentakrifkan pembolehubah ahli dan kaedah ahli (5) Kelas abstrak mempunyai pembina Apabila digunakan untuk mencipta objek subkelas, jvm mencipta objek kelas induk secara lalai apply Digunakan apabila jvm mencipta objek kelas induk. 2. Abstrak boleh mengubah suai kaedah (1) Kaedah yang diubah suai oleh asbtract dipanggil kaedah abstrak (2) Sintaks: pengubah akses nilai pulangan abstrak

Cara Springboot membaca fail pro tersuai dan menyuntik pembolehubah statik Cara Springboot membaca fail pro tersuai dan menyuntik pembolehubah statik May 30, 2023 am 09:07 AM

Springboot membaca fail pro dan menyuntik pembolehubah statik statik mailConfig.properties#Server mail.host=smtp.qq.com#Port number mail.port=587#Email account mail.userName=hzy_daybreak_lc@foxmail.com#Emel kod kebenaran mel. passWord =vxbkycyjkceocbdc#Masa kelewatan mail.timeout=25000#Pengirim mail.emailForm=hzy_daybreak_lc@foxmail.com#Pengirim mai

Apakah kaedah statik php Apakah kaedah statik php Oct 31, 2022 am 09:40 AM

"statik" dalam kaedah statik statik php bermakna sifat dan kaedah ini boleh dipanggil terus tanpa membuat instantiating kelas adalah kata kunci yang digunakan untuk mengubah suai sifat dan kaedah kelas, dan sintaks penggunaannya adalah seperti "kelas Foo {; public static $my_static = 'hello';}".

Sintaks khas dalam PHP: Statik, Akhir, Abstrak dan kata kunci lain Sintaks khas dalam PHP: Statik, Akhir, Abstrak dan kata kunci lain May 11, 2023 pm 04:00 PM

PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang popular digunakan secara meluas dalam pembangunan web. Bahasa PHP bukan sahaja mudah dipelajari dan digunakan, tetapi juga menyokong pelbagai paradigma pengaturcaraan, pengaturcaraan berorientasikan objek, pengaturcaraan berfungsi, dll. Dalam PHP, terdapat beberapa kata kunci sintaks khas, seperti Statik, Akhir, Abstrak, dll. Kata kunci ini mempunyai fungsi khas dalam pengaturcaraan berorientasikan objek. Artikel ini akan memperkenalkan kata kunci ini secara terperinci. Kata kunci statik Dalam PHP, kata kunci Statik mempunyai dua kegunaan

See all articles