PHP 5 Power Programming PDF ダウンロードアドレス http://www.jb51.net/books/28207.html
PHP4 では、コンストラクターの名前として __construct() は使用されません。メソッドを定義する必要があります。 C と同じように、クラスの名前を使用します。
PHP5 では、新しい統合コンストラクター命名メソッド __construct() が使用されます。もちろん、クラス名を使用することもできます。
ただし、両方を同時に使用すると、システムはデフォルトで __construct() を使用します。
コードをコピー コードは次のとおりです:
class Person{
// in PHP4 Method
public function Person(){
echo "PHP4 のメソッド";
}
//PHP5 の推奨メソッド
public function __construct(){
echo "PHP5推奨メソッド";
}
public functionsay(){
}
}
$p1=new Person();
?>
コードをコピーします コードは次のとおりです:
class Person{
private $_age;
public function __construct($age){
try {
if ($age<120){
$this->_age=$age ;
}else {
throw new Exception("入力した年齢が古すぎます");
}
}catch (Exception $e){
echo $e->getMessage ();
}
}
}
$p1=新しい人
?>
コードをコピー コードは次のとおりです:
/**
* MyClass を定義
*/
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private'; function printHello( )
{
echo $this->public;
echo $this->private;
}
$ obj = new MyClass();
echo $obj->public; // この行は通常どおり実行できます
echo $obj->protected; // この行は致命的なエラーを生成します
echo $obj->private; // この行も致命的なエラーを生成します
$obj->printHello() // 出力 Public、Protected、Private
/**
* MyClass2 を定義
* /
class MyClass2 extends MyClass
{
// public と protected は再定義できますが、private ですが
protected ではありません $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->private;
}
}
$obj2( ) ;
echo $obj->public; // この行は通常どおり実行できます
echo $obj2->private; // プライベートは定義されていません
echo $obj2->protected; / this この行は致命的なエラーを生成します
$obj2->printHello(); // Public と Protected2 を出力しますが、Private は出力しません
注: クラス内のすべてのメソッドはキーワードを使用する必要がありますpublic、protected、または private を定義します。これらのキーワードが設定されていない場合、メソッドはデフォルトの public に設定されます。
静的メソッド
class Foo {
public static $my_static = 'foo';public static function staticValue() {
return self::$my_static // クラス内の静的メンバーにアクセスするには self キーワードを使用します
}
$obj=new Foo();
echo $obj->staticValue();//メソッド 1
echo Foo::staticValue();//メソッド 2
?>
Clone object
PHP4 では、新しいオブジェクトが返されると、そのオブジェクト自体が返されます。
PHP5 では、新しいオブジェクトが返されると、そのオブジェクトが返されます。 Handle"
これは、PHP5 でオブジェクト インスタンス ($obj1) を別の変数 ($obj2) に割り当てるときに、両方のオブジェクトが同じメモリ領域を指すことを意味します。
例:
コードをコピー コードは次のとおりです:
クラス テスト{
public $str;
}
$obj1=new test();
$obj2= $obj1; obj2-> str="obj2";
echo $obj1->str;// "obj1" を出力します
$obj1 と $obj2 がポイントなのでこのため、オブジェクトを使用してメンバー変数の値を変更すると、別のオブジェクトに影響を与えます。
ただし、オブジェクトのコピー (2 つの独立したメモリ領域) を作成する必要がある場合があります。このとき、言語コマンド clone を使用できます。
コードは次のとおりです。 class test{
public $str;
}
$obj1= 新しいテスト();
$obj1->str="obj1";
$obj2= クローン
$obj2->str="obj2"; >echo $obj1- >str;//"obj2" が出力されます
?>
parent:: および self::
コードは次のとおりです: class Father{
public function __construct(){echo "親クラスのコンストラクターを呼び出す
";
}
}
class Son extends Father {
public function __construct() {
parent::__construct();//メソッド 1
// Father::__construct();//メソッド 2
echo "サブクラスのコンストラクターを呼び出す"
}
}
$son=new Son();
?>
結果:
親クラスのコンストラクターを呼び出します
サブクラスのコンストラクターを呼び出します
コードは次のとおりです: クラス Rectangle {
public $name=__CLASS__;}
class Square extends Rectangle {
public $name=__CLASS__;
public $name= __CLASS__;
}
関数 checkIfRectangle($shape){
if ($shape インスタンスオブ Rectangle ){
echo $shape->name;
echo "オブジェクトは Rectangle クラスのインスタンスではありません";
}
}
checkIfRectangle(new Square());//出力: Square
checkIfRectangle(new Circle()); //出力: オブジェクトは Rectangle クラスのインスタンスではありません
?>
注: __CLASS__ は、現在のクラスの名前を格納するために使用される特別な定数です。