cari
Rumahpembangunan bahagian belakangtutorial phpPHP的魔术常量(变量)、魔术方法(函数)、超全局变量的介绍

这篇文章主要介绍了关于PHP的魔术常量(变量)、魔术方法(函数)、超全局变量的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

一、魔术常量(魔术变量)

概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化。

1、__LINE__  获取文件中的当前行号。

2、__FILE__  获取文件的完整路径和文件名。

3、__DIR__   获取文件所在目录。

4、__FUNCTION__  获取函数名称(PHP 4.3.0 新加)。

5、__CLASS__    获取类的名称(PHP 4.3.0 新加)。

6、__METHOD__  获取类的方法名(PHP 5.0.0 新加)。

7、__NAMESPACE__ 当前命名空间的名称(区分大小写)。

8、__TRAIT__  Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。

二、超全局变量(9个)

1、$GLOBALS  :储存全局作用域中的变量
2、$_SERVER  :获取服务器相关信息
3、$_REQUEST :获取POST和GET请求的参数
4、$_POST : 获取表单的POST请求参数
5、$_GET: 获取表单的GET请求参数
6、$_FILES :获取上传文件的的变量
7、$_ENV : 获取服务器端环境变量的数组
8、$_COOKIE:获取浏览器的cookie

浏览器cookie的操作
设置cookie:setcookie(name, value, expire, path, domain);
获取cookie:$_COOKIE[“user”];
删除cookie:setcookie(“user”, “”, time()-3600);//设置过期时间

9、$_SESSION : 获取session

服务端session的操作
使用session前一定要session_start()启动session
储存session:$_SESSION[‘name’]=”leixuesong”;//数组操作
销毁session:unset($_SESSION[‘views’]);//销毁一个
session_destroy()和unset($_SESSION);//销毁所有的session

三、魔术方法(魔术函数)

概念:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。

分别为:    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等方法在 PHP 中被称为"魔术方法"(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

1、__construct() 构造函数:每次创建新对象(实例化对象)时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。

应用笔记:如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

应用范例:

<?php
class BaseClass {   
function __construct() {       
print "In BaseClass constructor\n";
   }
}class SubClass extends BaseClass {   
function __construct() {
       parent::__construct();       
       print "In SubClass constructor\n";
   }
}class OtherSubClass extends BaseClass {    // inherits BaseClass&#39;s constructor}// In BaseClass constructor$obj = new BaseClass();// In BaseClass constructor
// In SubClass constructor$obj = new SubClass();// In BaseClass constructor$obj = new OtherSubClass();
?>

2、__destruct() 析构函数:析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

应用笔记:

1.析构函数在脚本关闭时调用,此时所有的 HTTP 头信息已经发出。脚本关闭时的工作目录有可能和在 SAPI(如 apache)中时不同。

2.试图在析构函数(在脚本终止时被调用)中抛出一个异常会导致致命错误。

应用范例:

<?phpclass A
{    function __construct()
    {        $a = func_get_args();        
    $i = func_num_args();        
    if (method_exists($this,$f=&#39;__construct&#39;.$i)) {            
    call_user_func_array(array($this,$f),$a);
        }
    }   
    function __construct1($a1)
    {        
    echo(&#39;__construct with 1 param called: &#39;.$a1.PHP_EOL);
    }   
    function __construct2($a1,$a2)
    {        
    echo(&#39;__construct with 2 params called: &#39;.$a1.&#39;,&#39;.$a2.PHP_EOL);
    }   
    function __construct3($a1,$a2,$a3)
    {        
    echo(&#39;__construct with 3 params called: &#39;.$a1.&#39;,&#39;.$a2.&#39;,&#39;.$a3.PHP_EOL);
    }
}$o = new A(&#39;sheep&#39;);
$o = new A(&#39;sheep&#39;,&#39;cat&#39;);
$o = new A(&#39;sheep&#39;,&#39;cat&#39;,&#39;dog&#39;);// results:
// __construct with 1 param called: sheep
// __construct with 2 params called: sheep,cat
// __construct with 3 params called: sheep,cat,dog
?>

3、 __call() :在对象中调用一个不可访问方法时,__call() 会被调用。

public mixed __call ( string $name , array $arguments )

参数是要调用的方法名称。参数是一个枚举数组,包含着要传递给方法的参数。

<?phpclass MethodTest 
{    public function __call($name, $arguments) 
    {        // 注意: $name 的值区分大小写        
    echo "Calling object method &#39;$name&#39; "
             . implode(&#39;, &#39;, $arguments). "\n";
    }    /**  PHP 5.3.0之后版本  */    
    public static function __callStatic($name, $arguments) 
    {        // 注意: $name 的值区分大小写        
    echo "Calling static method &#39;$name&#39; "
             . implode(&#39;, &#39;, $arguments). "\n";
    }
}$obj = new MethodTest;$obj->runTest(&#39;in object context&#39;);

MethodTest::runTest(&#39;in static context&#39;);  // PHP 5.3.0之后版本
?>

4、__callStatic(): 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。

5、__set()  : 在给不可访问属性赋值时,__set() 会被调用。

6、__get()  : 读取不可访问属性的值时,__get() 会被调用。

7、__isset()  : 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。

8、__unset() : 当对不可访问属性调用 unset() 时,__unset() 会被调用。

9、__sleep() :方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。

serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则 NULL 被序列化,并产生一个 E_NOTICE 级别的错误。与之相反,unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

10、__wakeup() :经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。

应用范例:

<?php
class Connection 
{    protected $link;    
private $server, $username, $password, $db;    
    public function __construct($server, $username, $password, $db)
    {        $this->server = $server;        
    $this->username = $username;        
    $this->password = $password;        
    $this->db = $db;        
    $this->connect();
    }    
    private function connect()
    {        
    $this->link = mysql_connect($this->server, $this->username, $this->password);        
    mysql_select_db($this->db, $this->link);
    }    
    public function __sleep()
    {        
    return array(&#39;server&#39;, &#39;username&#39;, &#39;password&#39;, &#39;db&#39;);
    }    
    public function __wakeup()
    {        
    $this->connect();
    }
}
?>

11、__toString() :__toString() 方法用于一个类被当成字符串时回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。

<?php// Declare a simple classclass TestClass
{    public $foo;    public function __construct($foo) 
    {        $this->foo = $foo;
    }    public function __toString() {        return $this->foo;
    }
}$class = new TestClass(&#39;Hello&#39;);echo $class; //输出 Hello
?>

11、__invoke() :当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。(本特性只在 PHP 5.3.0 及以上版本有效)

<?phpclass CallableClass 
{    function __invoke($x) {        
var_dump($x);
    }
}
$obj = new CallableClass;$obj(5);
var_dump(is_callable($obj));   // is_callable — 检测参数是否为合法的可调用结构
?>以上会输出:
int(5)
bool(true)

12、__set_state() :自 PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。本方法的唯一参数是一个数组,其中包含按 array('property' => value, ...) 格式排列的类属性。

应用范例:

<?phpclass A
{    public $var1;   
public $var2;    
public static function __set_state($an_array) // As of PHP 5.1.0    {        
$obj = new A;        
$obj->var1 = $an_array[&#39;var1&#39;];        
$obj->var2 = $an_array[&#39;var2&#39;];        
return $obj;
    }
}$a = new A;
$a->var1 = 5;$a->var2 = &#39;foo&#39;;
eval(&#39;$b = &#39; . var_export($a, true) . &#39;;&#39;); // $b = A::__set_state(array(
                                            //    &#39;var1&#39; => 5,
                                            //    &#39;var2&#39; => &#39;foo&#39;,
                                            // ));var_dump($b);

?>以上例程会输出:object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>  string(3) "foo"}

13、__clone():对象复制。当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)

应用范例:

<?php
class SubObject
{    
static $instances = 0;    
public $instance;    
public function __construct() {        
$this->instance = ++self::$instances;
    }    
    public function __clone() {        
    $this->instance = ++self::$instances;
    }
}class MyCloneable
{    
public $object1;    
public $object2;    
function __clone()
    {      
        // 强制复制一份this->object, 否则仍然指向同一个对象        
        $this->object1 = clone $this->object1;
    }
}$obj = new MyCloneable();
$obj->object1 = new SubObject();
$obj->object2 = new SubObject();
$obj2 = clone $obj;
print("Original Object:\n");
print_r($obj);
print("Cloned Object:\n");
print_r($obj2);
?>
以上例程会输出:
Original Object:MyCloneable Object(
    [object1] => SubObject Object
        (
            [instance] => 1
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)
Cloned Object:MyCloneable Object(
    [object1] => SubObject Object
        (
            [instance] => 3
        )

    [object2] => SubObject Object
        (
            [instance] => 2
        )

)

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php中static、final、interface、abstract的区别

PHP empty()函数的说明

PHP测试memcached 的方法

Atas ialah kandungan terperinci PHP的魔术常量(变量)、魔术方法(函数)、超全局变量的介绍. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Bagaimanakah jenis membayangkan jenis PHP, termasuk jenis skalar, jenis pulangan, jenis kesatuan, dan jenis yang boleh dibatalkan?Apr 17, 2025 am 12:25 AM

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Bagaimanakah PHP mengendalikan pengklonan objek (kata kunci klon) dan kaedah sihir __clone?Apr 17, 2025 am 12:24 AM

Dalam PHP, gunakan kata kunci klon untuk membuat salinan objek dan menyesuaikan tingkah laku pengklonan melalui kaedah Magic \ _ _ _. 1. Gunakan kata kunci klon untuk membuat salinan cetek, mengkloning sifat objek tetapi bukan sifat objek. 2. Kaedah klon \ _ \ _ boleh menyalin objek bersarang untuk mengelakkan masalah menyalin cetek. 3. Beri perhatian untuk mengelakkan rujukan pekeliling dan masalah prestasi dalam pengklonan, dan mengoptimumkan operasi pengklonan untuk meningkatkan kecekapan.

PHP vs Python: Gunakan Kes dan AplikasiPHP vs Python: Gunakan Kes dan AplikasiApr 17, 2025 am 12:23 AM

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.

Huraikan tajuk caching HTTP yang berbeza (mis., Cache-Control, ETAG, Modified Last).Huraikan tajuk caching HTTP yang berbeza (mis., Cache-Control, ETAG, Modified Last).Apr 17, 2025 am 12:22 AM

Pemain utama dalam tajuk cache HTTP termasuk kawalan cache, ETAG, dan modifikasi terakhir. 1.Cache-Control digunakan untuk mengawal dasar caching. Contoh: Cache-Control: Max-Age = 3600, Awam. 2. ETAG mengesahkan perubahan sumber melalui pengenal unik, Contoh: ETAG: "686897696A7C876B7E". 3. Modified Last Menunjukkan Masa Pengubahsuaian Terakhir Sumber, Contoh: Modified Last: Wed, 21OCT201507: 28: 00GMT.

Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1?Terangkan hashing kata laluan yang selamat di PHP (mis., Password_hash, password_verify). Mengapa tidak menggunakan MD5 atau SHA1?Apr 17, 2025 am 12:06 AM

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP: Pengenalan kepada bahasa skrip sisi pelayanPHP: Pengenalan kepada bahasa skrip sisi pelayanApr 16, 2025 am 12:18 AM

PHP adalah bahasa skrip sisi pelayan yang digunakan untuk pembangunan web dinamik dan aplikasi sisi pelayan. 1.Php adalah bahasa yang ditafsirkan yang tidak memerlukan kompilasi dan sesuai untuk perkembangan pesat. 2. Kod PHP tertanam dalam HTML, menjadikannya mudah untuk membangunkan laman web. 3. PHP memproses logik sisi pelayan, menghasilkan output HTML, dan menyokong interaksi pengguna dan pemprosesan data. 4. PHP boleh berinteraksi dengan pangkalan data, penyerahan borang proses, dan melaksanakan tugas-tugas sampingan pelayan.

PHP dan Web: Meneroka kesan jangka panjangnyaPHP dan Web: Meneroka kesan jangka panjangnyaApr 16, 2025 am 12:17 AM

PHP telah membentuk rangkaian sejak beberapa dekad yang lalu dan akan terus memainkan peranan penting dalam pembangunan web. 1) PHP berasal pada tahun 1994 dan telah menjadi pilihan pertama bagi pemaju kerana kemudahan penggunaannya dan integrasi lancar dengan MySQL. 2) Fungsi terasnya termasuk menghasilkan kandungan dinamik dan mengintegrasikan dengan pangkalan data, yang membolehkan laman web dikemas kini secara real time dan dipaparkan secara peribadi. 3) Aplikasi dan ekosistem PHP yang luas telah mendorong kesan jangka panjangnya, tetapi ia juga menghadapi kemas kini versi dan cabaran keselamatan. 4) Penambahbaikan prestasi dalam beberapa tahun kebelakangan ini, seperti pembebasan Php7, membolehkannya bersaing dengan bahasa moden. 5) Pada masa akan datang, PHP perlu menangani cabaran baru seperti kontena dan microservices, tetapi fleksibiliti dan komuniti aktif menjadikannya boleh disesuaikan.

Mengapa menggunakan PHP? Kelebihan dan faedah dijelaskanMengapa menggunakan PHP? Kelebihan dan faedah dijelaskanApr 16, 2025 am 12:16 AM

Manfaat utama PHP termasuk kemudahan pembelajaran, sokongan pembangunan web yang kukuh, perpustakaan dan kerangka yang kaya, prestasi tinggi dan skalabilitas, keserasian silang platform, dan keberkesanan kos. 1) mudah dipelajari dan digunakan, sesuai untuk pemula; 2) integrasi yang baik dengan pelayan web dan menyokong pelbagai pangkalan data; 3) mempunyai rangka kerja yang kuat seperti Laravel; 4) Prestasi tinggi dapat dicapai melalui pengoptimuman; 5) menyokong pelbagai sistem operasi; 6) Sumber terbuka untuk mengurangkan kos pembangunan.

See all articles

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)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa