ホームページ php教程 php手册 PHP5 権威プログラミング読書学習ノート 電子書籍付き download_php 基礎

PHP5 権威プログラミング読書学習ノート 電子書籍付き download_php 基礎

May 16, 2016 am 09:00 AM
php5

PHP 5 Power Programming PDF ダウンロード アドレス /books/28207.html

PHP4 では使用されません __construct() の名前としてコンストラクターでは、C の場合と同様に、クラスの名前を使用してメソッドを定義する必要があります。
PHP5 では、新しい統一コンストラクター命名メソッド __construct() が使用されています。もちろん、クラス名を使用することも可能です。
ただし、両方を同時に使用すると、システムはデフォルトで __construct() を使用します。

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

class Person {
//PHP4 のメソッド
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$this- >_age=$age;
}else {
throw new Exception("入力した年齢が古すぎます");
}
}catch (Exception $e){
echo $ e->getMessage();
}
}
}
$p1=new Person(121);
?>

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

/**
* MyClass の定義
*/
class MyClass
{
public $ public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public; echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; //この行は正常に実行できます
echo $obj->protected; // この行は致命的なエラーを生成します
echo $obj->private; // この行も致命的なエラーを生成します
$obj ->printHello(); // 出力 Public、Protected、Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// 使用可能public の場合 protected で再定義しますが、
protected ではなく private にします $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this-> protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj->public; // この行は通常通り実行できますecho $obj2->private; // private は定義されていません
echo $obj2->protected; // この行は致命的なエラーを生成します
$obj2->printHello(); // 出力 Public, Protected2 、ただし Private

注: クラス内のすべてのメソッドは、キーワード public、protected、または private を使用して定義する必要があります。これらのキーワードが設定されていない場合、メソッドはデフォルトの public に設定されます。
静的メソッド
静的メソッドは、オブジェクト インスタンスを作成せずに class name::static メソッドを通じて呼び出すことも、$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?>

オブジェクトのクローン
PHP4 では、新しいオブジェクトが返されると、「オブジェクト自体」が返されます。
PHP5 では、新しいオブジェクトが時間の場合、返されるのは「オブジェクトを指すハンドル」です。
これは、PHP5 では、オブジェクト インスタンス ($obj1) を別の変数 ($obj2) に割り当てるときに、両方のオブジェクトがその変数を指すことを意味します。同じメモリ領域です。
例:
コードをコピー コードは次のとおりです。

php
クラス test{
public $str;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= $obj1 ;
$obj2->str="obj2";
echo $obj1->str;//「obj1」が出力されます
?>

$obj1 と $obj2 は同じメモリ領域を指しているため、いずれかのオブジェクトを使用してメンバー変数の値を変更すると、他のオブジェクトに影響を与えます。
しかし、オブジェクトのコピー (2 つの独立したメモリ領域) を作成する必要がある場合があります。このとき、言語コマンド clone を使用できます。
以下の例を参照してください。
コードをコピー コードは次のとおりです。

class test{
public $str ;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= クローン $obj1;
$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 を使用することをお勧めします。
インスタンスのインスタンス
コードをコピー コードは次のとおりです:

class Rectangle {
public $name=__CLASS__;
}
class Square extends Rectangle {
public $name=__CLASS__;
}
class Circle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name;
}else {
echo "このオブジェクトは Rectangle クラスのインスタンスではありません";
}
}
checkIfRectangle(new Square());//出力: Square
checkIfRectangle(new Circle());/ /出力: オブジェクトは Rectangle クラスのインスタンスではありません
?>

注: __CLASS__ は現在のクラスの名前を格納するために使用される特別な定数です
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

php5とphp8の違いは何ですか php5とphp8の違いは何ですか Sep 25, 2023 pm 01:34 PM

php5とphp8の違いは何ですか

php5でポート80を変更する方法 php5でポート80を変更する方法 Jul 24, 2023 pm 04:57 PM

php5でポート80を変更する方法

php5がポート9000でリッスンしない問題を解決する方法 php5がポート9000でリッスンしない問題を解決する方法 Jul 10, 2023 pm 04:01 PM

php5がポート9000でリッスンしない問題を解決する方法

php7 と php5 の構文の違いは何ですか php7 と php5 の構文の違いは何ですか Jul 10, 2023 pm 03:25 PM

php7 と php5 の構文の違いは何ですか

php7と5のバージョンの違いは何ですか? php7と5のバージョンの違いは何ですか? Sep 15, 2023 pm 04:11 PM

php7と5のバージョンの違いは何ですか?

php5がポート9000でリッスンしない問題を解決する方法 php5がポート9000でリッスンしない問題を解決する方法 Mar 21, 2023 pm 04:32 PM

php5がポート9000でリッスンしない問題を解決する方法

php5でポート80を変更する方法 php5でポート80を変更する方法 Mar 21, 2023 pm 04:32 PM

php5でポート80を変更する方法

PHP7 と PHP5 の構文の違いについて説明します。 PHP7 と PHP5 の構文の違いについて説明します。 Mar 21, 2023 pm 07:10 PM

PHP7 と PHP5 の構文の違いについて説明します。

See all articles