ホームページ  >  記事  >  バックエンド開発  >  PHP5のマジック定数とマジックメソッドをベースに詳しく解説_PHPチュートリアル

PHP5のマジック定数とマジックメソッドをベースに詳しく解説_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:06:24895ブラウズ

魔术常量:
1。__LINE__
返回文件中的当前行号。
2。__FILE__
  返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自PHP4.0.2 起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
3。__FUNCTION__
  返回函数名称(PHP4.3.0 新加)。自PHP5 起本常量返回该函数被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
4。__CLASS__
  返回类的名称(PHP4.3.0 新加)。自PHP5 起本常量返回该类被定义时的名字(区分大小写)。在PHP4 中该值总是小写字母的。
5。__METHOD__
  返回类的方法名(PHP5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
魔术函数:
1。__construct()
  构造函数: 实例化对象时被调用,
  当__construct和以类名为函数名的构造函数同时存在时,__construct将被调用,另一个不被调用。
4。__get()
  读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。
5。__set()
  设置一个对象的属性时,
  若属性存在,则直接赋值;
  若不存在,则会调用__set函数。
6。__toString()
  打印一个对象的时被调用。如echo$obj;或print$obj;
7。__clone()
  克隆对象时被调用。如:$t=newTest();$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()
  实例化一个对象时,如果对应的类不存在,则该方法被调用。

初识魔术方法
Php5.0发布以来为我们提供了很多面向对象的特性,尤其是为我们提供了好多易用的魔术方法,这些魔术方法可以让我们简化我们的编码,更好的设计我们的系统。今天我们就来认识下php5.0给我们提供的魔术方法。
PHP| 魔术方法|__toString(),__clone(),__call(),__autoload() 详解
__toString()
如果我有一个类:
classPerson
{
private $name = “”;
private $age = 0;
function__construct($name = “”, $age = “”)
{
$this->name =$name;
$this->age = $age;
}
functionsay()
{
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()是在直接打印对象时执行的方法,我们可以用该方法打印类的一些相关信息。注意:是两个下划线,方法必须有返回值。
__clone()
我们知道对象是可以直接赋值的,比如
$p2= $p1;   //这里是一个对象有两个引用
那么我执行:
$p1->say();
$p2->say();
是都可以执行的,而且效果一样。

別のメソッドがあります:
$p3= clone $p1; //ここでの違いは、$p3 が新しいオブジェクトであることです。
同時に、クラスにメソッドを追加します:
function__clone()
{
$this->name = "I am a copy"; //注: $this はクローンによって生成されたオブジェクト自体です。 、現在のクラスではありません
}
次に、次を実行します:
$p3->say();
出力:
name: I am a copy
age: 20
この時点で、__clone() メソッドがオブジェクトのクローン作成時に実行されるメソッド。この機能は、新しくクローンされたコピーのプロパティやその他の操作を初期化します。
__call()
このメソッドの主な機能は、このクラスのインスタンスが存在しないメソッドを呼び出すときに __call() メソッドを実行することです。事前にクラス内で宣言する必要があることに注意してください:
function__call($fname,$argus)
{
echo "呼び出したメソッド: ".$fname." は存在しません
";
echo "パラメータは". print_r($argus);
}
__autoload()
通常、クラスを呼び出すときは、最初にクラスが配置されているファイルを導入する必要があります(呼び出す場合は「xxx.php」を含めます)。ページ内のクラス たくさんある場合は、「xxx.php」をインクルードする必要があります。明らかにこれは面倒です。
__autoload() メソッドは、この問題の解決に役立ちます。

たとえば、上記の Person クラスが配置されているファイルを Person_class.php として定義し、
新しい php ファイル test.php を作成し、内容を編集します:
function __autoload($calssName)
{
include $className. "_class.php ”; //これを見れば分かるかも知れませんね?笑
}
$p= new Person(“mifan”, 22);
$p->say();
test.php ページの実行時にエラーは発生しません。
__autoload() メソッドは、クラスが存在しない場合に呼び出されるメソッドで、存在しないクラスのクラス名を宣言する文字列型パラメータを持ちます。
もちろん、クラスファイルの命名にも非常にこだわりがあります。 Person_class.php など、クラスと関連するものを用意するのが最善です

www.bkjia.com本当http://www.bkjia.com/PHPjc/327629.html技術記事魔法定数:1。 __LINE__ は、ファイル内の現在の行番号を返します。 2. __FILE__ は、ファイルの完全なパスとファイル名を返します。インクルード ファイルで使用された場合は、インクルード ファイル名を返します。 PH以来...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。