php魔术常量怎么用

例如需要打开一个文件,在对象创建时打开,对象消亡时关闭
<?php
class FileRead
{
protected $handle = NULL;

function __construct(){
$this->handle = fopen(...);
}

function __destruct(){
fclose($this->handle);
}
}
?>

这两个方法在继承时可以扩展,
例如:
<?php
class TmpFileRead extends FileRead
{
function __construct(){
parent::__construct();
}

function __destruct(){
parent::__destruct();
}
}
?>

__call()和__callStatic()
在对象中调用一个不可访问方法时会调用这两个方法,后者为静态方法。
这两个方法在可变方法(Variable functions)调用中可能会用到。
<?php
class MethodTest
{
public function __call ($name, $arguments) {
echo "Calling object method '$name' ". implode(', ', $arguments). "\n";
}

public static function __callStatic ($name, $arguments) {
echo "Calling static method '$name' ". implode(', ', $arguments). "\n";
}
}

$obj = new MethodTest;
$obj->runTest('in object context');
MethodTest::runTest('in static context');
?>

__get(),__set(),__isset()和__unset()
当get/set一个类的成员变量时调用这两个函数。例如将对象变量保存在另外一个数组中,而不是对象本身的成员变量
<?php
class MethodTest
{
private $data = array();

public function __set($name, $value){
$this->data[$name] = $value;
}

public function __get($name){
if(array_key_exists($name, $this->data))
return $this->data[$name];
return NULL;
}

public function __isset($name){
return isset($this->data[$name])
}

public function unset($name){
unset($this->data[$name]);
}
}
?>

__sleep()和__wakeup()
当在执行serialize()和unserialize()时,会先调用这两个函数。
例如在序列化一个对象时,这个对象有一个数据库链接,想要在反序列化中恢复链接状态,则可以通过重构这两个函数来实现链接的恢复。例子如下:
<?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('server', 'username', 'password', 'db');
}

public function __wakeup()
{
$this->connect();
}
}
?>

__toString()
对象当成字符串时的回应方法。例如使用echo $obj;来输出一个对象
<?php
// Declare a simple class
class TestClass
{
public function __toString() {
return 'this is a object';
}
}

$class = new TestClass();
echo $class;
?>

这个方法只能返回字符串,而且不可以在这个方法中抛出异常,否则会出现致命错误。
__invoke()
调用函数的方式调用一个对象时的回应方法。如下
<?php
class CallableClass
{
function __invoke() {
echo 'this is a object';
}
}
$obj = new CallableClass;
var_mp(is_callable($obj));
?>

__set_state()
调用var_export()导出类时,此静态方法会被调用。
<?php
class A
{
public $var1;
public $var2;

public static function __set_state ($an_array) {
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}

$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
var_mp(var_export($a));
?>

__clone()
当对象复制完成时调用。例如在设计模式详解及PHP实现:单例模式一文中提到的单例模式实现方式,利用这个函数来防止对象被克隆。
<?php
public class Singleton {
private static $_instance = NULL;

// 私有构造方法
private function __construct() {}

public static function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}

// 防止克隆实例
public function __clone(){
die('Clone is not allowed.' . E_USER_ERROR);
}
}
?>

❷ php 中的魔术函数都有哪些

魔术函数1。__construct()
实例化对象时被调用,
当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。2。__destruct()
当删除一个对象或对象操作终止时被调用。3。__call()
对象调用某个方法,
若方法存在,则直接调用;
若不存在,则会去调用__call函数。4。__get()
读取一个对象的属性时,
若属性存在,则直接返回属性值;
若不存在,则会调用__get函数。5。__set()
设置一个对象的属性时,
若属性存在,则直接赋值;
若不存在,则会调用__set函数。6。__toString()
打印一个对象的时被调用。如echo $obj;或print $obj;7。__clone()
克隆对象时被调用。如:$t=new Test();$t1=clone $t;8。__sleep()
serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。9。__wakeup()
unserialize时被调用,做些对象的初始化工作。10。__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)。11。__unset()
unset一个对象的属性时被调用。如:unset($c->name)。12。__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。13。__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。魔术常量1。__LINE__
返回文件中的当前行号。2。__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。3。__FUNCTION__
返回函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。4。__CLASS__
返回类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。5。__METHOD__
返回类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
(1)初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。

❸ PHP中的预定义常量,类常量和魔术常量的区别

PHP 向它运行的任何脚本提供了大量的预定义常量。不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。

对于一些基本的常量是这些常量在 PHP 的内核中定义。它包含 PHP、Zend 引擎和 SAPI 模块,如:

PHP_VERSION

PHP_OS

PHP_SAPI

PHP_EOL

对于一些是通过加载扩展库才会出现,比如:

DIRECTORY_SEPARATOR (string)

PATH_SEPARATOR (string)

对于上面的常量是区分大小写的。

有八个魔术常量它们的值随着它们在代码中的位置改变而改变。例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,也就是说魔术常量是不区分大小写的。

❹ php 中的魔术常量有哪些

  • __sleep()serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作

  • __wakeup()unserialize() 会检查是否存在一个 __wakeup() 方法。如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。

  • __toString() 方法用于一个类被当成字符串时应怎样回应,例如echo $obj;时调用

  • __invoke()当尝试以调用函数的方式调用一个对象时,该方法会被调用

  • __set_state()起当调用 var_export() 导出类时,此方法会被调用

  • __debugInfo起当调用 var_mp() 导出类时,此方法会被调用

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

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

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

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

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

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

❺ 怎么样在php配置中加载魔术常量

直接用就可以了,比如你要获取当前文件的完整路径:__FILE__
获取当前目录的完整路径:__DIR__

❻ 几个PHP 的“魔术常量”

几个 PHP 的“魔术常量”

名称

说明

__LINE__

文件中的当前行号。

__FILE__

文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自
PHP 4.0.2 起,__FILE__
总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。

__DIR__

文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于
dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
=

__FUNCTION__

函数名称(PHP 4.3.0 新加)。自 PHP 5
起本常量返回该函数被定义时的名字(区分大小写)。在
PHP 4 中该值总是小写字母的。

__CLASS__

类的名称(PHP 4.3.0 新加)。自 PHP 5
起本常量返回该类被定义时的名字(区分大小写)。在
PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如
Foo\Bar)。注意自 PHP 5.4 起 __CLASS__
对 trait 也起作用。当用在 trait 方法中时,__CLASS__
是调用 trait 方法的类的名字。

__TRAIT__

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

__METHOD__

类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。

__NAMESPACE__

当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)

❼ php中以双下划线打头的作用是什么求高手,有木有

命名的规则
加一个为私有的
加两个一般都是系统默认的,系统预定义的,即所谓:
====
“魔术方法”与“魔术常量”
====
★PHP双下划线函数即“魔术方法”:
5、__construct、__destruct
__construct 构造方法,当一个对象创建时调用此方法。
__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法。如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋值勤为NULL或者调用unset.
6、__clone
PHP5中的对象赋值是使用的引用赋值,此时,对象会自动调用__clone魔术方法。
7、__toString
__toString方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时。
出处:http://zbl19830728.blog.163.com/blog/static/4777639020113832554982/

★PHP起止为双下划线的常量即为“魔术常量”:
__LINE__文件中的当前行号。
__FILE__文件的完整路径和文件名。
__DIR__文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠
注:以上内容来自“PHP中文手册->语言参考->常量->魔术常量”。

❽ php中魔术常量的杠杠怎么打出来

魔术常量
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

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

一般也就这几个

❾ 在PHP中,预定义的常量和变量,是怎么使用和输出的

__LINE__ :文件中的当前行号。

__FILE__ :文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

TRUE:TRUE与FALSE是PHP中的判断结果,TURE表示结果为真,FALSE为假.

E_PARSE:首先来看一下error_reporting这个函数,

error_reporting:配置错误信息回报的等级。

语法: int error_reporting(int [level]);

返回值: 整数

函数种类: PHP 系统功能

内容说明: 本函数用来配置错误信息回报的等级,参数 level 是一个整数的位遮罩 (bitmask),见下表。

遮罩值 表示名称
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING

·E_NOTICE 表示一般情形不记录,只有程序有错误情形时才用到,例如企图存取一个不存在的变量,或是呼叫 stat() 函数检视不存在的文件。
·E_WARNING 通常都会显示出来,但不会中断程序的执行。这对除错很有效。例如:用有问题的正则表达式呼叫 ereg()。
·E_ERROR 通常会显示出来,亦会中断程序执行。意即用这个遮罩无法追查到内存配置或其它的错误。
·E_PARSE 从语法中解析错误。
·E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
·E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。

这样应该很好理解了吧

最后建议你去下一个PHP手册.掌握基本的语法.