Rumah php教程 php手册 php __call __autoload __clone __toString __sleep

php __call __autoload __clone __toString __sleep

Jun 13, 2016 am 11:18 AM
autoload clone php sleep tostring Penjelasan terperinci

 

、__wakeup 详解

1、__call
__call( $method, $arg_array ) 当调用一个未定义的方法是调用此访求

php教程5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它

方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。

例七:__call

class foo {
  function __call($name,$arguments) {
    print("did you call me? i'm $name!");
  }
} $x = new foo();
$x->dostuff();
$x->fancy_stuff();
?>

这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检

查你的参数并且通过调用一个私有的方法来传递参数。


2、__autoload
__autoload 函数,它会在试图使用尚未被定义的类时自动调用。

看下面的实例

写好了一个msyql类,

mysql教程.php

class mysql{
     funciton __construct(){
      ............
    }
}


现在我在index.php页面要用到mysql 类,我就这样,

function __authload($class){
      include_once("path".$class.".php");
}

$mysql=new mysql();

?>
include_once("path/".$class.".php");

path/   是类文件所在路径

$class 就是调用时的类名啦

后面的.php 当然是扩展名啦,

一个类文件可能感觉不到有多好用,如果类文件很多的时候,

每个类都要include一下,那太麻烦了,只要每个页面之前写一个 __autoload() 即

可,

通过调用此函数,脚本引擎在 php 出错失败前有了最后一个机会加载所需的类。

3、__construct、__destruct


构造函数与析构函数[__construct __destruct()]哦,他在在类class中的作用是

初始化与销毁变量下面我们来看看实例以

class db

{

  function __construct()
  {           
     
   $this->mconnid=mysql_connect ($this->dbhost,$this->dbuser,$this-

>dbpwd);//建立连接

            mysql_select_db($this->dbname, $this->mconnid);    //选择数

据库

            mysql_query("set names 'gbk'");//设置数据库教程编码为gbk

        }
       
        //__destruct:析构函数,断开连接

 function __destruct()
  {
            mysql_close($this->mconnid); //此处还有问题......

        }
 }

这时我们在用时就不需要考虑数据连接与关闭了,只要$aa = new db();就ok了。

更多详细内容请查看:

http://www.bkjia.com/phper/18/aa7fc14039d6f49b02c646638588be7f.htm

4、__clone

__clone魔术方法

我们知道对象是可以直接赋值的,比如
$p2 = $p1;   //这里是一个对象有两个引用

那么我执行:

$p1->say();
$p2->say();

是都可以执行的,而且效果一样。
我们还有一种方法:
$p3 = clone $p1;     //注意clone是克隆关键字,这里与上面的不同是$p3是一

个新的对象。

同时我们在类里加入一个方法:

function __clone()
{
$this->name = “我是副本”;  //注意:这里的$this是克隆产生的对象本身,不

是当前类
}

然后我们执行:

$p3->say();

打印出

name:我是副本
age:20

到这里我们明白,__clone()方法是在克隆对象的时候执行的方法,它的作用是对

新克隆出来的副本
进行属性初始化等操作。

 

5、__tostring

__tostring方法在将一个对象转化成字符串时自动调用

如果我有一个类:

class person
{
private $name = “”;
private $age = 0;

function __construct($name = “”, $age = “”)
{
$this->name = $name;
$this->age = $age;
}

function say()
{
echo “name:”.$this->name.”
”.”age:”.$this->age.”
”;  
}
}

现在我去实例化这个类,然后去打印这个实例:

$p1 = new person(“liuzy”,20);
echo $p1;  //直接打印会出错

显然这样直接打印对象是会出现错误的,因为对象是引用句柄,不能直接打印。这

时,我们可以用到__tostring()方法。我们在person类里加一个__tostring()方法


function __tostring()
{
return “i am  person,my name is “.$this->name.”
”;
}

然后再刷新页面,发现什么了?
现在我们明白,__tostring()是在直接打印对象时执行的方法,我们可以用该方法

打印类的一些相关信息。注意:是两个下划线,方法必须有返回值


6、__sleep、__wakeup
__sleep 串行化的时候用
__wakeup 反串行化的时候调用

在php进行序列化时,serialize() 检查类中是否有 __sleep() ,如果有,则该函

数将在任何序列化之前运行。该函数必须返回一个需要进行序列化保存的成员属性

数组,并且只序列化该函数返回的这些成员属性. 该函数有两个作用: 第一. 在序

列化之前,关闭对象可能具有的任何数据库连接等. 第二. 指定对象中需要被序列

化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__sleep要

返回的数组中,这样该属性就不会被序列化

相反地,unserialize() 从字节流中创建了一个对象之后,马上检查是否具有

__wakeup 的函数的存在。如果存在,__wakeup 立刻被调用。使用 __wakeup 的目

的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

   class user
   {
       public $name;
       public $id;

       function __construct()
       {
           $this->id = uniqid();          //give user a unique id 赋予一

个不同的id
       }

       function __sleep()
       {   
           return(array("name"));        //do not serialize this->id 不

串行化id
       }

       function __wakeup()
       {
           $this->id = uniqid();         //give user a unique id
       }
   }

   $u = new user;
   $u->name = "haha";

   $s = serialize($u);                   //serialize it 串行化 注意不串

行化id属性,id的值被抛弃

   $u2 = unserialize($s);                //unserialize it 反串行化 id被

重新赋值

  
   //$u and $u2 have different ids $u和$u2有不同的id
   var_dump($u);                        
   var_dump($u2);
?>

---------- php debug ----------
object(user)#1 (2) {
["name"]=>
string(4) "haha"
["id"]=>
string(13) "47fa045529f69"
}
object(user)#2 (2) {
["name"]=>
string(4) "haha"
["id"]=>
string(13) "47fa04552a49a"
}


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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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)

Topik panas

Tutorial Java
1663
14
Tutorial PHP
1264
29
Tutorial C#
1237
24
Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apakah kaedah Magic PHP (__construct, __destruct, __call, __get, __set, dll) dan menyediakan kes penggunaan? Apr 03, 2025 am 12:03 AM

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.

PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular PHP dan Python: Membandingkan dua bahasa pengaturcaraan yang popular Apr 14, 2025 am 12:13 AM

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

PHP dalam Tindakan: Contoh dan aplikasi dunia nyata PHP dalam Tindakan: Contoh dan aplikasi dunia nyata Apr 14, 2025 am 12:19 AM

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

See all articles