PHP5(1) との最初の親密な接触_PHP チュートリアル

WBOY
リリース: 2016-07-21 16:10:41
オリジナル
857 人が閲覧しました


記事ソース: PHPBuilder.com
原著者: Luis Argerich
翻訳: erquan
erquan 注: まだ PHP5 を体験する時間がないので、外国人が書いた記事を翻訳しただけです。
以下はすべてerquanによる翻訳です。私が誰かを誤解させるのはこれが初めてではないことを願っています。多少の誤差はご了承ください。
うまくいくかどうか見てみましょう。うまくいったら翻訳を終了します。うまくいかない場合は、皆さんを誤解させないように翻訳するだけですが、これも面倒です。 。 。 。 :)
再投稿する際は記事の出典を明記してください、ありがとうございます:)


PHP5の正式バージョンはまだリリースされていませんが、開発バージョンによってもたらされるPHPの新しい機能を学び、体験することができます。
この記事では、次の 3 つの新しい PHP5 機能に焦点を当てます:
* 新しいオブジェクト モード
* 構造化例外処理
* 名前空間

正式に開始する前に、次の点にご注意ください:
* 記事内のいくつかの例は、PHP4 メソッドを使用して実装されています。記事の読みやすさを高めます
※この記事で説明されている新機能は正式版の機能と異なる場合がありますので、正式版を参照してください。

* 新しいオブジェクト モード

PHP5 の新しいオブジェクト モードは、PHP4 に基づいて大幅に「アップグレード」されました。JAVA によく似ています: (.
以下のテキストで簡単に説明し、小さな例を添付します。 PHP5 の新機能を体験し始めるために
さあ~~:)

* コンストラクターとデストラクター
* オブジェクトへの参照
* クローンオブジェクト
* オブジェクトの 3 つのモード: プライベート、パブリック、プロテクト
* インターフェイス
* 仮想class
* __call()
* __set() および __get()
* 静的メンバー

コンストラクターとデストラクター

PHP4 では、クラスと同じ名前の関数がデフォルトでクラスのコンストラクターになり、PHP4 にはデストラクターの概念がありません。 (Erquan の注: これは JAVA と同じです)
しかし、PHP5 からは、コンストラクターの名前は一律 __construct になり、デストラクター: __destruct が存在します (Erquan の注: これは Delphi と同じです。PHP5 が吸収したことがわかります)多くの成熟した OO アイデアをおめでとうございます~~):
例 1: コンストラクターとデストラクター

class foo {
var $x;

function __construct($x) {
$this->x = = new foo(4);
$o1->display();
?>

実行後、「bye bye」出力が表示されます。これはクラスが終了するためです __destruct() デストラクターが呼び出されました~~

オブジェクト参照

ご存知のとおり、PHP4 では、関数またはメソッドに変数を渡すとき、アドレス演算子 & を使用して宣言しない限り、実際にはコピーを渡していることになります
変数の引用を行っていることになります。 PHP5 では、オブジェクトは常に参照によって指定されます。
例 2: オブジェクト参照

class foo {
var $x;

function setX($x) {
$this-> ;x = $x ;
}

function getX() {
return $this->x;
}
}

$o1 = new foo;
$o1->setX(4);
$o2 = $o1;
$o1->setX(5);
if($o1->getX() == $o2->getX()) print("オーマイガッド!");
?> ;

(エルクアンの注: 「Oh my god!」の出力が表示されます)
オブジェクトのクローンを作成します

上記のように、オブジェクトへの参照を取得したくない場合があり、コピーを使用したい場合はどうすればよいでしょうか? PHP5 が提供する __clone メソッドで実装されます。
例 3: オブジェクトのクローン

class foo {
var $x;

function setX($x) {
$this->x = $x ;
}

function getX() {
return $this->x;
}
}

$o1 = new foo;
$o1->setX(4);
$o2 = $o1-> ; __clone();
$o1->setX(5);

if($o1->getX() != $o2->getX()) print("コピーは独立しています");
? ;

オブジェクトのクローンを作成する方法は多くの言語で適用されているため、そのパフォーマンスについて心配する必要はありません :)。

プライベート、パブリック、プロテクト

PHP4 では、メソッドと変数はパブリックであるため、オブジェクトの外部でメソッドと変数を操作できます。PHP5 では、変数とメソッドの制御権限を制御するために、Public (パブリック)、Protected (保護された)、Private (プライベート) の 3 つのモードが挙げられます

Public: メソッドと変数にはいつでもアクセスできます
Private: のみアクセスできますクラス内でアクセスされ、サブクラスからはアクセスできません
Protected: クラス、サブクラス内でのみアクセスできます

例 4: public、protected、private

class foo //OK です。同じクラスでプライベート メソッドを呼び出すことができます
print("私は保護されています");
}

プライベート関数 private_foo() {
$this->x = 3;
print("私はプライベートです" );
}
}

class foo2 extends foo {
public function display() {
$this->protected_foo();
$this->public_foo();
// $this->private_foo( ) / / 無効です! この関数は基本クラスではプライベートです
}
}

$x = new foo();
$x->public_foo();
//$x->protected_foo();クラスおよび派生クラスの外部で保護されたメソッドを呼び出すことはできません
//$x->private_foo(); //無効なプライベート メソッドはクラス内でのみ使用できます

$x2 = new foo2();
$x2 -> display();
?>


ヒント: 変数は常にプライベート形式です。プライベート変数に直接アクセスすることは、OOP の良いアイデアではありません


。 インターフェイス

ご存知のとおり、PHP4 で継承を実装するための構文は「class foo extendsparent」です。 PHP4 であっても PHP5 であっても、多重継承はサポートされていません。つまり、1 つのクラスからのみ継承できます。 PHP5 の「インターフェイス」は特別なクラスです。メソッドを具体的に実装するわけではありませんが、メソッドの名前とメソッドが所有する要素を定義し、キーワードを通じてそれらを一緒に参照して特定のアクションを実装するために使用されます。

例 5: Interface
interface displayable {
function display();
}

interface printable {
function doprint();
}

class fooimplements displayable,printable {
function display() {
// code
}

function doprint() {
// code
}
}
?>

これは、コードを読んで理解するのに非常に役立ちます。このクラスを読むと、わかります。 foo には表示可能および印刷可能なインターフェースが含まれており、print() (Erquan の注: doprint() である必要があります) メソッドと display() メソッドが必要です。 foo の宣言を見る限り、内部でどのように実装されているかを知らなくても簡単に操作できます。

仮想クラス

仮想クラスは、スーパークラスと同様にメソッドと変数を定義できるクラスです。
仮想メソッドは仮想クラスで定義することもできます。このメソッドはこのクラスでは実装できませんが、そのサブクラスで実装する必要があります

例 6: 仮想クラス

abstract class foo {
protected $x ;

抽象関数 display();

function setX($x) {
$this->x = $x;
}
}


class foo2 extends foo {
function display () {
//コード
}
}
?>


__call() メソッド

PHP5 では、__call() メソッドを定義すると、クラス内に存在しない変数またはメソッドにアクセスしようとすると、__call() が自動的に呼び出されます:
例 7: __call


class foo {

function __call($name,$arguments) {
print("電話しましたか? $name です!");
}
}

$x = new foo( );
$x->doStuff();
$x->fancy_stuff();
?>


この特定のメソッドは、実装するためにプライベート パラメーターに依存しているため、「メソッドのオーバーロード」を実装するために慣例的に使用されます。このパラメータを確認してください:
例 8: __call 実装メソッドのオーバーロード

class Magic {

function __call($name,$arguments) {
if($name=='foo' ) {
0] );
}
}

プライベート関数 foo_for_int($x) {
print("ああ int!");
}

プライベート関数 foo_for_string($x) {
print("ああ 文字列!" );
}
}

$x = new Magic();
$x->gt;foo(3);
$x->foo("3");
?>


__set() メソッドと __get() メソッド

未定義の変数にアクセスまたは設定する場合、次の 2 つのメソッドが呼び出されます:

例 9: __set と __get

class foo {

function __set($ name,$val) {
print("こんにちは、$name に $val を入れようとしました");
}

function __get($name) {
print("$name を要求しました ");
}
}

$x = new foo();
$x->bar = 3;
print($x->winky_winky);
?>gt;

http://www.bkjia.com/PHPjc/314174.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314174.html技術記事記事のソース: PHPBuilder.com 原著者: Luis Argerich 翻訳者: erquan Erquan 注: まだ PHP5 を体験する時間がないので、外国人が書いた記事を翻訳しただけです。 以下はすべてerquanによる翻訳です...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!