导航:首页 > 编程语言 > php5魔术方法

php5魔术方法

发布时间:2022-09-07 10:34:01

php魔术方法有哪些

1.constuct()构造函数
通常实例化完一个对象之后,都要对该对象的属性进行初始化!在实例化一个对象的时候,PHP系统会自动的调用一个名字叫作construct()的方法,我们把这个方法叫作“构造方法”!
2.destruct()析构方法
与构造方法是一对,构造方法是在一个对象“出生”的时候由系统自动调用的,而析构方法是在一个对象“消失”的时候由系统自动调用的!
析构方法的名字叫destruct();注意里面不能有任何的参数!
3.clone()克隆
触发时机:是在克隆一个对象的时候,对新对象进行初始化的工作
4.autoload()自动加载类
当调用不存在的类的时候自动调用!
5.tostring()
当将对象当成字符串使用的时候自动调用
6.invoke()
当将对象当成函数使用的时候自动调用
7,set()
当对无法访问的属性赋值时自动调用(比如:类外调用私有属性)
8.get()
当对获取无法访问的属性值的时候自动调用
9.unset()
当销毁无法访问的属性的时候自动调用
10.isset()
当判断无法访问的属性是否存在的时候自动调用
11.call()
当调用无法访问的普通方法时自动触发

⑵ php5 中魔术方法函数有哪几个

魔术函数:
9.3 构造函数:__construct()
9.3.1 实例化对象时被调用。
9.3.2 在类中,构造函数是用来初始化对象的,利用构造函数,可以操作对象,并改变它的值。
9.3.3 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。
9.3.4 当子类重写了构造函数,子类被实例化时,只调用子类的构造函数,而父类的构造函数不被调用。
9.4 析构函数:__destruct()
9.4.1 当删除一个对象或对象操作终止时被调用。
9.4.2 当该对象的所有引用都被删除,或者对象被显式销毁时执行。
9.5 克隆函数:__clone()
9.5.1 当对象被拷贝(克隆)时直接调用。
9.5.2 如$a = new Action(); $a = $object;
9.6 __set($name, $value)
9.6.1 用$object->a = 17的方式给属性赋值时,如果属性a存在且是public型,那么直接给属性a赋值皆可;
9.6.2 如果属性a不存在或者是protected/private型,就会调用__set($name, $value)方法。
9.6.3 二个参数:属性、属性值。
9.7 __get($name)
9.7.1 用$object->a的方式读取对象的属性时,如果属性a存在且是public型,那么直接返回该属性的值;
9.7.2 如果属性a不存在或者是protected/private修饰的不可直接访问的类型,就会调该方法并以返回值为准。
9.7.3 一般可以使用该方法使外部可限制性地访问内部属性,或者完成类似java中的反射操作。
9.8 __isset($name)
9.8.1 检测一个对象的属性是否存在时被调用。
9.8.2 如:isset($c->name),如果name不存在,则触发该函数。
9.8.3 对不存在或者不可访问的属性使用isset()或者empty()时,__isset()会被调用。
9.9 __unset($name)
9.9.1 销毁一个对象的属性时被调用。
9.9.2 如:unset($c->name),如果name不存在,则触发该函数。
9.9.3 当unset一个不存在或者不可访问的属性时,__unset()会被调用,否则直接unset该属性皆可。
9.10 __call($name, $arguments)
9.10.1 当调用不存在或者不可访问的方法时,会调用__call($name, $arguments)方法。
9.11 __callStatic($name, $arguments)
9.11.1 当在静态方法中调用不存在或者不可访问的方法时,会调用__callStatic($name, $arguments)方法。
9.11.2 这个方法 是PHP5.3里才添加的,比较新。
9.12 __toString()
9.12.1 当打印对象时会被直接调用。如 echo $object; 或 print $obj;
9.12.2 注意:这时候php会抛出一个Catchable fatal error错误;用print_r打印对象不会触发此函数。
9.13 __set_state()
9.13.1 用var_export()输出一个对象时,__set_state()会被调用,输出内容以该魔术方法的返回值为准。
9.13.2 注:var_export()和var_mp()类似,只是var_export()输出的内容符合php语法。
9.14 __autoload($name)
9.14.1 实例化一个对象时,如果对应的类不存在,则该方法被调用。
9.14.2 这个函数比较特殊,这个函数并不是作为类的成员方法使用的。
9.14.3 注意:该方法是全局函数,参数是类的名称。
9.14.4 可以用spl_autoload_register函数来定义其他的函数来代替__autoload
9.15 __sleep()
9.15.1 serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。
9.16 __wakeup()
9.16.1 unserialize时被调用,做些对象的初始化工作。

⑶ php魔术方法__tostring

__tostring()方法:在直接输出对象引用的时候,就不会产生错误,而是自动调用了__tostring()方法,输出__tostring()方法中返回的字符串

通俗来说就是 对象一般是使用print_r() 或 var_mp() 来打印访问

但对于一般闲的人来说直接 使用 echo 输出对象时,必定会报错的,原因是对象无法使用echo的。

这个时候如果想解决这个错误,咱们应该怎么操作呢?

可以很好的利用__tostring()这个魔术方法

但是切记使用__toString() 时返回值一定要使用return 来进行返回。

<?php
header("content-type:text/html;charset=utf-8");
class demo{
public $foo;
public function __construct($foo){
$this->foo=$foo;
}
//定义一个__toString()方法时,返加一个成员属性$foo
public function __toString(){
return $this->foo;
}
}
$demo=new demo('hello PHP成员');
echo $demo;

⑷ 请详细说明一下php5中的魔术方法

PHP处理对象部分的内核完全重新开发过,提供更多功能的同时也提高了性能。在以前版本的php中,处理对象和处理基本类型(数字,字符串)的方式是一样的。这种方式的缺陷是:当将对象赋值给一个变量时,或者通过参数传递对象时,对象将被完全拷贝一份。在新的版本里,上述操作将传递引用(可以把引用理解成对象的标识符),而非值。
很多PHP程序员可能甚至没有察觉到老的对象处理方式。事实上,大多数的php应用都可以很好地运行。或者仅仅需要很少的改动。
私有和受保护成员
PHP5引入了私有和受保护成员变量的概念。我们可以用它来定义类成员的可见性。
例子
受保护成员可以被子类访问, 而私有成员只能被类本身访问。

代码:--------------------------------------------------------------------------------

<?php
class MyClass {
private $Hello = "Hello, World!\n";
protected $Bar = "Hello, Foo!\n";
protected $Foo = "Hello, Bar!\n";

function printHello() {
print "MyClass::printHello() " . $this->Hello;
print "MyClass::printHello() " . $this->Bar;
print "MyClass::printHello() " . $this->Foo;
}
}

class MyClass2 extends MyClass {
protected $Foo;

function printHello() {
MyClass::printHello(); /* Should print */
print "MyClass2::printHello() " . $this->Hello; /* Shouldn't print out anything */
print "MyClass2::printHello() " . $this->Bar; /* Shouldn't print (not declared)*/
print "MyClass2::printHello() " . $this->Foo; /* Should print */
}
}

$obj = new MyClass();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello(); /* Should print */

$obj = new MyClass2();
print $obj->Hello; /* Shouldn't print out anything */
print $obj->Bar; /* Shouldn't print out anything */
print $obj->Foo; /* Shouldn't print out anything */
$obj->printHello();
?>
--------------------------------------------------------------------------------

私有方法和受保护方法
PHP5也引入了私有方法和受保护方法的概念。
例子:

代码:--------------------------------------------------------------------------------

<?php
class Foo {
private function aPrivateMethod() {
echo "Foo::aPrivateMethod() called.\n";
}

protected function aProtectedMethod() {
echo "Foo::aProtectedMethod() called.\n";
$this->aPrivateMethod();
}
}

class Bar extends Foo {
public function aPublicMethod() {
echo "Bar::aPublicMethod() called.\n";
$this->aProtectedMethod();
}
}

$o = new Bar;
$o->aPublicMethod();
?>
--------------------------------------------------------------------------------

以前的不使用类的老代码,没有访问修饰符(public, protected, private)的代码可以不经改动运行。
抽象类和抽象方法
Php5也引入了抽象类和抽象方法的概念。抽象方法只是声明了方法的签名并不提供它的实现。包含抽象方法的类必须被声明成抽象类。
例子:

代码:--------------------------------------------------------------------------------

<?php
abstract class AbstractClass {
abstract public function test();
}

class ImplementedClass extends AbstractClass {
public function test() {
echo "ImplementedClass::test() called.\n";
}
}

$o = new ImplementedClass;
$o->test();
?>
--------------------------------------------------------------------------------

抽象类不能被实例化。以前的不使用抽象类的老代码可以不经改动运行。
接口
Php5引入了接口。一个类可以实现多个接口。
例子:

代码:--------------------------------------------------------------------------------

<?php
interface Throwable {
public function getMessage();
}

class MyException implements Throwable {
public function getMessage() {
// ...
}
}
?>
--------------------------------------------------------------------------------

以前的不使用接口的老代码可以不经改动运行

类的型别提示
PHP5依然是弱类型的,不过在定义函数参数时,可以使用类的型别提示来声明期望传入的对象类型
Example

代码:--------------------------------------------------------------------------------

<?php
interface Foo {
function a(Foo $foo);
}

interface Bar {
function b(Bar $bar);
}

class FooBar implements Foo, Bar {
function a(Foo $foo) {
// ...
}

function b(Bar $bar) {
// ...
}
}

$a = new FooBar;
$b = new FooBar;

$a->a($b);
$a->b($b);
?>
--------------------------------------------------------------------------------

和其他强类型语言一样,php5类的型别提示在运行期间检查而非编译期间检查。即:

代码:--------------------------------------------------------------------------------

<?php
function foo(ClassName $object) {
// ...
}
?>
和下面的代码是一样的:
<?php
function foo($object) {
if (!($object instanceof ClassName)) {
die("Argument 1 must be an instance of ClassName");
}
}
?>
--------------------------------------------------------------------------------

这个语法只适用于类,不适用于内建类型。
Final

PHP 5 引入了final关键字来声明final成员和final方法。final成员和final方法不能被子类覆盖。
Example

代码:--------------------------------------------------------------------------------

<?php
class Foo {
final function bar() {
// ...
}
}
?>
--------------------------------------------------------------------------------

更进一步,可以把类声明成final。将类声明成final可以阻止这个类被继承。final类里面的方法缺省地都是final的,无需再声明一次。
Example

代码:--------------------------------------------------------------------------------

<?php
final class Foo {
// class definition
}

// the next line is impossible
// class Bork extends Foo {}
?>
--------------------------------------------------------------------------------

属性不能定义成为final.
以前的不使用final的老代码可以不经改动运行.
对象克隆
Php4没有提供一种机制来让用户自己定义复制构造子( constructor)控制对象的复制过程。Php4做二进制的拷贝,因而很精确地复制了对象的所有属性。
精确地复制对象的所有属性可能并不是我们一直想要的。有个例子可以很好地说明我们确实需要复制构造子:比如一个GTK Window的对象 a。 a持有它所需要的全部资源。当复制的这个GTK Window到对象b时候,我们更希望b持有新的资源对象。再举个例子:对象a包含了一个对象c, 当你把对象a 复制到对象c的时候。我们可能更希望对象b包含一个新的对象c的, 而不是一个对象c的引用。(译者注:这里所说的就是浅克隆和深克隆。)
对象的复制是通过clone这个关键字达到的(Clone调用被克隆对象的__clone()方法)。对象的__clone方法不能够直接被调用。

代码:--------------------------------------------------------------------------------

<?php
$_of_object = clone $object;
?>
--------------------------------------------------------------------------------

当developer创建对象的一份拷贝的时候,php5将会检查 __clone()方法是否存在。如果不存在,那么它就会呼叫缺省的__clone()方法,复制对象的所有属性。如果__clone()方法已经定义过,那么_clone()方法就会负责设置新对象的属性。为了方便起见,Engine会缺省地复制所有的属性。所以在__clone()方法中,只需要覆盖那些需要更改的属性就可以了。如下:
Example

代码:--------------------------------------------------------------------------------

<?php
class MyCloneable {
static $id = 0;

function MyCloneable() {
$this->id = self::$id++;
}

function __clone() {
$this->address = "New York";
$this->id = self::$id++;
}
}

$obj = new MyCloneable();

$obj->name = "Hello";
$obj->address = "Tel-Aviv";

print $obj->id . "\n";

$obj_cloned = clone $obj;

print $obj_cloned->id . "\n";
print $obj_cloned->name . "\n";
print $obj_cloned->address . "\n";
?>
--------------------------------------------------------------------------------

统一构造函数
Php5允许开发者声明一个类的构造方法。拥有构造方法的类在每次创建新的对象的时候都会呼叫这个方法,因此构造方法适合对象在被使用之前的初始化工作
Php4中,构造方法的名称和类的名称一样。考虑到从子类构造方法呼叫父类构造方法的情况是非常普遍的,而将类从一个继承体系中搬迁引起的父类变更就常常导致需要更改类的构造方法,php4的做法显然是不太合理的。
Php5引入了一个声明构建函数的标准方法: __construct().如下:
Example

代码:--------------------------------------------------------------------------------

<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}

$obj = new BaseClass();
$obj = new SubClass();
?>
--------------------------------------------------------------------------------

为保持向后的兼容性,如果php5不能够找到 __construct(),它会寻找老式的构造方法,即与类同名的方法。简单的说,只有当老代码里包含了一个__construct()方法的时候,才存在一个兼容性的问题。
析构方法
对于面向对象的编程来说,可以定义析构方法是非常有用的一个功能。析构方法可以用来记录调试信息,关闭数据库连接等等一些清除收尾的工作。Php4中没有析构方法,尽管php4已经支持可以注册一个函数以便请求结束的时候被调用。
Php5引进的析构方法的概念和其他面向对象的语言(比如java)是一致的。当指向这个对象的最后一个引用被销毁的时候,析构方法被调用,调用完成后释放内存。注意:析构方法不接受任何参数。
Example

代码:--------------------------------------------------------------------------------

<?php
class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
}

function __destruct() {
print "Destroying " . $this->name . "\n";
}
}

$obj = new MyDestructableClass();
?>
--------------------------------------------------------------------------------

和构建方法一样,父类的析构方法也不会被隐含调用。子类可以在自己的析构方法通过调用parent::__destruct()来显式地调用它。
Constants
Php5引入了class级别的常量。

代码:--------------------------------------------------------------------------------

<?php
class Foo {
const constant = "constant";
}

echo "Foo::constant = " . Foo::constant . "\n";
?>
--------------------------------------------------------------------------------

老的没有使用const的代码仍然正常运行。
Exceptions
Php4没有异常控制。Php5引入了和其它语言(java)相似的异常控制模式。应该注意的是php5里面支持捕捉全部异常,但是不支持finally子句。
在catch语句块里面,可以重新抛出异常。也可以有多个catch语句,在这种情况下,被捕捉到的异常从上往下依次比较和catch语句比较异常,第一个类型匹配的catch语句将会被执行。如果一直搜索到底还没有发现匹配的catch子句,则寻找下一个try/catch语句。最后不能捕捉的异常将被显示出来。如果异常被捕捉,那么程序会接着catch语句块的下面开始执行。
Example

代码:--------------------------------------------------------------------------------

<?php
class MyException {
function __construct($exception) {
$this->exception = $exception;
}

function Display() {
print "MyException: $this->exception\n";
}
}

class MyExceptionFoo extends MyException {
function __construct($exception) {
$this->exception = $exception;
}

function Display() {
print "MyException: $this->exception\n";
}
}

try {
throw new MyExceptionFoo('Hello');
}
catch (MyException $exception) {
$exception->Display();
}
catch (Exception $exception) {
echo $exception;
}
?>
--------------------------------------------------------------------------------

上面的例子表明可以定义一个并不继承自 Exception的异常类,但是,最好还是从Exception继承并定义自己的异常。这是因为系统内建的Exception类能够收集到很多有用的信息, 而不继承它的异常类是得不到这些信息的。下面的php代码模仿了系统内建Exception类。每个属性后面都加了注释。每个属性都有一个getter,由于这些getter方法经常被系统内部处理调用,所以这些方法被标明了final。
Example

代码:--------------------------------------------------------------------------------

<?php
class Exception {
function __construct(string $message=NULL, int code=0) {
if (func_num_args()) {
$this->message = $message;
}
$this->code = $code;
$this->file = __FILE__; // of throw clause
$this->line = __LINE__; // of throw clause
$this->trace = debug_backtrace();
$this->string = StringFormat($this);
}

protected $message = 'Unknown exception'; // exception message
protected $code = 0; // user defined exception code
protected $file; // source filename of exception
protected $line; // source line of exception

private $trace; // backtrace of exception
private $string; // internal only!!

final function getMessage() {
return $this->message;
}
final function getCode() {
return $this->code;
}
final function getFile() {
return $this->file;
}
final function getTrace() {
return $this->trace;
}
final function getTraceAsString() {
return self::TraceFormat($this);
}
function _toString() {
return $this->string;
}
static private function StringFormat(Exception $exception) {
// ... a function not available in PHP scripts
// that returns all relevant information as a string
}
static private function TraceFormat(Exception $exception) {
// ... a function not available in PHP scripts
// that returns the backtrace as a string
}
}
?>
--------------------------------------------------------------------------------

如果我们定义的一异常类都是继承自Exception基类
无兼容性问题。老的代码不会受到这一特性的影响。
Dereferencing objects returned from functions
Php4中不能再次引用函数返回的对象以进一步呼叫返回对象的方法,而php5是可以的。

代码:--------------------------------------------------------------------------------

<?php
class Circle {
function draw() {
print "Circle\n";
}
}

class Square {
function draw() {
print "Square\n";
}
}

function ShapeFactoryMethod($shape) {
switch ($shape) {
case "Circle":
return new Circle();
case "Square":
return new Square();
}
}

ShapeFactoryMethod("Circle")->draw();
ShapeFactoryMethod("Square")->draw();
?>
--------------------------------------------------------------------------------

静态成员变量能够被初始化。
Example

代码:--------------------------------------------------------------------------------

<?php
class foo {
static $my_static = 5;
public $my_prop = 'bla';
}

print foo::$my_static;
$obj = new foo;
print $obj->my_prop;
?>
--------------------------------------------------------------------------------

静态方法
PHP 5 引入了静态方法,可以在不实例化类的情况下呼叫静态方法。
Example

代码:--------------------------------------------------------------------------------

<?php
class Foo {
public static function aStaticMethod() {
// ...
}
}

Foo::aStaticMethod();
?>
--------------------------------------------------------------------------------

伪变量$this不能够在静态方法方法中使用。
instanceof
Php5引入了instanceof关键字,允许用它来测试一个对象是一个类的实例,或者是一个派生类的实例,或者实现了某个接口
Example

代码:--------------------------------------------------------------------------------

<?php
class baseClass { }

$a = new baseClass;

if ($a instanceof baseClass) {
echo "Hello World";
}
?>
--------------------------------------------------------------------------------

Static function variables
现在,静态变量在编译阶段处理。因此程序员可以通过引用为静态变量赋值。这可以改善性能,不过,不能够使用对静态变量的间接引用了。
按引用传递的函数参数现在也可以设置缺省值了。
Example

代码:--------------------------------------------------------------------------------

<?php
function my_function(&$var = null) {
if ($var === null) {
die("$var needs to have a value");
}
}
?>
--------------------------------------------------------------------------------

__autoload()
__autoload() 拦截函数在一个未声明的类被初始化的时候自动调用。该类的名字会被自动传递给__autoload()函数。而__autoload()也只有这么唯一的一个参数。
Example

代码:--------------------------------------------------------------------------------

<?php
function __autoload($className) {
include_once $className . ".php";
}

$object = new ClassName;
?>
--------------------------------------------------------------------------------

可重载的方法呼叫和属性访问
方法呼叫和属性访问都能够通过__call, __get() and __set()方法重载。
Example: __get() and __set()

代码:--------------------------------------------------------------------------------

<?php
class Setter {
public $n;
public $x = array("a" => 1, "b" => 2, "c" => 3);

function __get($nm) {
print "Getting [$nm]\n";

if (isset($this->x[$nm])) {
$r = $this->x[$nm];
print "Returning: $r\n";
return $r;
} else {
print "Nothing!\n";
}
}

function __set($nm, $val) {
print "Setting [$nm] to $val\n";

if (isset($this->x[$nm])) {
$this->x[$nm] = $val;
print "OK!\n";
} else {
print "Not OK!\n";
}
}
}

$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_mp($foo);
?>
--------------------------------------------------------------------------------

Example: __call()

代码:--------------------------------------------------------------------------------

<?php
class Caller {
private $x = array(1, 2, 3);

function __call($m, $a) {
print "Method $m called:\n";
var_mp($a);
return $this->x;
}
}

$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_mp($a);
?>
--------------------------------------------------------------------------------

迭代
当和foreach一起使用对象的时候,迭代的方式被重载过了。缺省的行为是迭代类的所有属性。
Example

代码:--------------------------------------------------------------------------------

<?php
class Foo {
public $x = 1;
public $y = 2;
}

$obj = new Foo;

foreach ($obj as $prp_name => $prop_value) {
// using the property
}
?>
--------------------------------------------------------------------------------

一个类的所有对象都能够被迭代浏览到, 如果这个类实现了一个空的接口:Traversable. 换句话说,实现了Traversable接口的类可以和foreach一起使用。
接口 IteratorAggregate 和Iterator允许指定类的对象在代码中如何迭代。IteratorAggregate接口有一个方法:getIterator() 必须返回一个数组
Example

代码:--------------------------------------------------------------------------------

<?php
class ObjectIterator implements Iterator {

private $obj;
private $num;

function __construct($obj) {
$this->obj = $obj;
}
function rewind() {
$this->num = 0;
}
function valid() {
return $this->num < $this->obj->max;
}
function key() {
return $this->num;
}
function current() {
switch($this->num) {
case 0: return "1st";
case 1: return "2nd";
case 2: return "3rd";
default: return $this->num."th";
}
}
function next() {
$this->num++;
}
}

class Object implements IteratorAggregate {

public $max = 3;

function getIterator() {
return new ObjectIterator($this);
}
}

$obj = new Object;

// this foreach ...
foreach($obj as $key => $val) {
echo "$key = $val\n";
}

// matches the following 7 lines with the for directive.
$it = $obj->getIterator();
for($it->rewind(); $it->hasMore(); $it->next) {
$key = $it->current();
$val = $it->key();
echo "$key = $val\n";
}
unset($it);
?>
--------------------------------------------------------------------------------

新的__toString方法
可以通过覆盖__toString方法来控制对象到字符串的转换。
Example

代码:---------------------------------------

⑸ php5中魔术方法函数有哪几个,请举例说明各自的用法

__construct() :实例化对象时被调用;
__destuct():当删除一个对象或者对象操作终止是被执行;
__call():调用对象不存在方法时被调用;
__get():调用对象不存在的属性时被调用;
__set():设置对象不存在的属性时被调用;_
_toString():打印一个对象时被调用,比如echo $obj,print($obj);
__clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;
__sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;
__wakeup():unserialize之前被调用,做些对象的初始化;
__isset():检测对象是否存在属性的时候被调用,如 isset($c->name);
__unset():unset一个对象属性时被调用,如:unset($c->name);
__set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值;,
__autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用。
希望你能采纳,谢谢。

⑹ php魔术方法。。

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

魔术方法的引入是对面向对象编程思想的进一步实现,重载就是通过魔术方法来实现的。

PHP 魔术方法主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等。

最常见的是__construct(), __destruct(),__get(), __set()等:

__construct和__destruct是类的构造函数和析构函数。

⑺ php什么是魔术方法

__construct(),
__destruct(),
__call(),
__callStatic(),
__get(),
__set(),
__isset(),
__unset(),
__sleep(),
__wakeup(),
__toString(),
__invoke(),
__set_state(),
__clone()

__debugInfo()
等方法在
PHP
中被称为"魔术方法"(Magic
methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。

⑻ 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中魔术常量的杠杠怎么打出来

魔术常量
__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的魔术方法

PHP的魔术方法:

1、__construct() :实例化对象时自动调用。

2、__destruct() :销毁对象或脚本执行结束时自动调用。

3、__call($name, $args) :调用对象不存在得方法时执行此函数。

4、__get() :获取对象不存在的属性时执行此函数。

5、__set() :设置对象不存在的属性时执行此函数。

6、__isset() : 检测对象的某个属性是否存在时执行此函数。

7、__unset() :销毁对象的某个属性时执行此函数。

8、__toString() :将对象当作字符串输出时执行此函数。

9、__clone() :克隆对象时执行此函数。

10、__autoload() :实例化对象时,当类不存在时,执行此函数自动加载类。

11、__sleep() :serialize之前被调用,可以指定要序列化的对象属性。

12、__wakeup :unserialize之前被调用,可以执行对象的初始化工作。

13、__set_state() :调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。


阅读全文

与php5魔术方法相关的资料

热点内容
清除网络通配符dos命令 浏览:835
鸿蒙系统怎么快速换回安卓 浏览:710
pdf绿色虚拟打印机 浏览:211
androidtab框架 浏览:144
java转php的时间戳 浏览:635
编译libstdc依赖 浏览:655
清算法人与原法人的区别 浏览:407
家庭装修下载什么app软件 浏览:572
美食博主用什么app拍视频 浏览:813
ipone手机如何加密微信 浏览:355
自来水加密阀阀帽 浏览:432
华为交换机dhcp配置命令 浏览:317
androidbitmap缩小 浏览:272
单片机串口控制灯 浏览:86
大讯云服务器安装视频 浏览:786
华为算法领先世界 浏览:654
linux路由重启 浏览:567
php的模板编程 浏览:322
编译器原理与实现书 浏览:711
dos选择命令 浏览:19