ホームページ > php教程 > php手册 > PHP5 権威プログラミング読書学習ノート (電子書籍ダウンロード付き)

PHP5 権威プログラミング読書学習ノート (電子書籍ダウンロード付き)

WBOY
リリース: 2016-06-13 11:59:25
オリジナル
1392 人が閲覧しました

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=新しい人
?>


; オブジェクト属性へのアクセス 保護は OOP の重要なパラダイムです
パブリック: どこからでもアクセスできます
保護: クラス メンバーは、オブジェクト内のメソッドから、そのメンバーが配置されているクラスのサブクラスおよびスーパークラスからアクセスできます
プライベート: クラス メンバーのみ そのクラスによってオブジェクト内のメソッドからアクセスできますが、継承されたクラスのメンバーからはアクセスできません。プライベート メンバーは継承されないため、関連する 2 つのクラスが同じ名前のプライベート変数を宣言できます。
つまり、どちらのクラスも自身のプライベート プロパティのみを参照でき、プライベート メンバー間には関係がありません。
例:

コードをコピー コードは次のとおりです:

/**
* 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 に設定されます。

静的メソッド

静的メソッドは、オブジェクト インスタンスを作成せずにクラス名::静的メソッドを通じて呼び出すことも、$this->static メソッドを通じてオブジェクト インスタンス内で呼び出すこともできます。 self: :呼び出す静的メソッド。

コードをコピー

コードは次のとおりです:

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::

self: : 現在のクラスを指し、通常は静的メンバー、メソッド、定数にアクセスするために使用されます。
parent:: 親クラスを指します。多くの場合、親クラスのコンストラクターとメソッドを呼び出すために使用されます。親クラスのメンバーと定数にアクセスするために使用されます 注: クラスの階層を簡単に変更できるため、親クラスの特定の名前の代わりにparent::を使用する必要があります。 例:



コードをコピー

コードは次のとおりです: class Father{

public function __construct(){

echo "親クラスのコンストラクターを呼び出す
";
}
}
class Son extends Father {
public function __construct() {
parent::__construct();//メソッド 1
// Father::__construct();//メソッド 2
echo "サブクラスのコンストラクターを呼び出す"
}
}
$son=new Son();
?>


結果:
親クラスのコンストラクターを呼び出します
サブクラスのコンストラクターを呼び出します

推奨方法 1、理由は上記に記載されています。

インスタンスのインスタンス


コードをコピー

コードは次のとおりです: クラス 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__ は、現在のクラスの名前を格納するために使用される特別な定数です。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート