検索
ホームページphp教程php手册PHP5 との最初の親密な接触(1)


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


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

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

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

PHP5 の新しいオブジェクト モードは、PHP4 に基づいて大幅に「アップグレード」されています。JAVA によく似たものになります: (.
以下のテキストの一部で実現します。 、PHP5 の新機能を体験し始めるのに役立つ小さな例を示します
さあ~~:)

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

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

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

class foo {
var $ x;

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

関数 display() {
print($this ->x);
}

function __destruct() {
print("bye bye");
}
}

$o1 = 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("オーマイガッド!");
?>

( Erquan のメモ: あなたはそうするでしょう「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 では、変数とメソッドに対する
制御権限を制御するために 3 つのモードが挙げられています: Public (パブリック)、Protected (保護された)、および Private (プライベート)

パブリック: メソッドと変数はアクセス時にどこでも使用できます
プライベート: クラス内でのみアクセスでき、サブクラスからもアクセスできません
保護: クラスまたはサブクラス内でのみアクセスできます

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

class foo {
private $x;

public function public_foo() {
print("I'm public ");
}

protected function protected_foo() {
$this->private_foo(); //同じクラスにいるので、プライベート メソッドを呼び出すことができます
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(); public_foo();
//$x->protected_foo(); //無効なため、クラスおよび派生クラスの外で保護されたメソッドを呼び出すことはできません
//$x->private_foo (); //無効なプライベート メソッドクラス内でのみ使用できます

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


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


を実装する必要があります。 インターフェース

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

例 5: インターフェイス
interface displayable {
function display();
}

interface printable {
function doprint( );
}

class foo は、displayable,printable を実装します {
function display() {
// code
}

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

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

仮想クラス

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

例 6: 仮想クラス

php
abstract class foo {
protected $x;

abstract function 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("電話しましたか? 私' m $name!");
}
}

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


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

class Magic {

function __call($name,$arguments) {
if($name= ='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this ->foo_for_string($ argument[0]);
}
}

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

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

$x = new Magic(); >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);
?>>

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php5和php8有什么区别php5和php8有什么区别Sep 25, 2023 pm 01:34 PM

php5和php8的区别在性能、语言结构、类型系统、错误处理、异步编程、标准库函数和安全性等方面。详细介绍:1、性能提升,PHP8相对于PHP5来说在性能方面有了巨大的提升,PHP8引入了JIT编译器,可以对一些高频执行的代码进行编译和优化,从而提高运行速度;2、语言结构改进,PHP8引入了一些新的语言结构和功能,PHP8支持命名参数,允许开发者通过参数名而不是参数顺序等等。

今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法!今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法!Mar 15, 2024 pm 04:13 PM

一、今日头条发布文章怎么才能有收益?今日头条发布文章获得更多收益方法!1.开通基础权益:原创文章选择投放广告可获得收益,视频必须要原创横屏才会有收益。2.开通百粉权益:粉丝量达到百粉以上,微头条、原创问答创作及问答均可获得收益。3.坚持原创作品:原创作品包含文章、微头条及问题等,要求300字以上。注意违规抄袭作品作为原创发布,会被扣信用分,即使有收益也会被扣除。4.垂直度:做专业领域一类的文章,不能随意跨领域写文章,会得不到合适的推荐,达不到作品的专和精,难以吸引粉丝读者。5.活跃度:活跃度高,

基于JavaScript构建实时翻译工具基于JavaScript构建实时翻译工具Aug 09, 2023 pm 07:22 PM

基于JavaScript构建实时翻译工具引言随着全球化的需求日益增长,跨国交流和交流的频繁发生,实时翻译工具成为了一种非常重要的应用。我们可以利用JavaScript和一些现有的API来构建一个简单但实用的实时翻译工具。本文将会介绍如何基于JavaScript来实现这个功能,并附有代码示例。实施步骤步骤1:创建HTML结构首先,我们需要创建一个简单的HTML

php5如何改80端口php5如何改80端口Jul 24, 2023 pm 04:57 PM

php5改80端口的方法:1、编辑Apache服务器的配置文件中的端口号;2、辑PHP的配置文件以确保PHP在新端口上工作;3、重启Apache服务器,PHP应用程序将开始在新的端口上运行。

Java百度翻译API实现中文与芬兰语互相翻译的技术突破Java百度翻译API实现中文与芬兰语互相翻译的技术突破Aug 05, 2023 am 08:25 AM

Java百度翻译API实现中文与芬兰语互相翻译的技术突破导语:随着全球化进程的不断加速,人们对语言翻译的需求也越来越大。在软件开发领域,实现多语言翻译也变得非常重要。本文将介绍如何使用Java编程语言以及百度翻译API实现中文与芬兰语之间的互相翻译,我们将展示如何通过此技术突破实现人工智能在多语言翻译方面的应用。准备工作:在正式开始实现之前,我们需要进行一些

python百度翻译API实现越南语翻译python百度翻译API实现越南语翻译Aug 08, 2023 pm 12:10 PM

Python百度翻译API实现越南语翻译引言:随着全球交流越来越紧密,语言翻译变得越来越重要。在计算机领域,有许多自动翻译工具可以帮助我们去理解和翻译不同的语言。百度翻译API是其中一种常用的自动翻译工具,它提供了丰富的语种支持。本文将介绍如何使用Python编程语言,结合百度翻译API实现越南语翻译。我们将通过获取百度翻译API的密钥,编写Python代码

在Java中使用Gson库,如何将FieldNamingPolicy枚举翻译成中文?在Java中使用Gson库,如何将FieldNamingPolicy枚举翻译成中文?Aug 23, 2023 pm 07:33 PM

Gson库提供了作为枚举的一部分的命名约定。我们可以使用类的方法设置字段命名策略。FieldNamingPolicy枚举常量IDENTITY-使用此命名策略,字段名称不变。LOWER_CASE_WITH_DASHES-使用此命名策略,将Java字段名称从驼峰形式修改为小写字段名称,每个单词之间用破折号(-)分隔。LOWER_CASE_WITH_UNDERSCORES-使用此命名策略,将Java字段名称从驼峰形式修改为小写字段名称,每个单词之间用下划线(_)分隔。UPPER_CAMEL_CASE-

用 Python 写的文档批量翻译工具,效果竟然超越付费软件?用 Python 写的文档批量翻译工具,效果竟然超越付费软件?Aug 09, 2023 pm 05:37 PM

本文将给大家分享一个实用的Python办公自动化脚本 「利用Python批量翻译英文Word文档并保留格式」,最终效果甚至比部分收费的软件还要好!先来看看具体的工作内容。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。