タグ

ブックマーク / www.php.net (88)

  • PHP: グローバル空間 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    名前空間の定義がない場合、すべてのクラスや関数の定義はグローバル空間に配置されます。 これは、名前空間に対応する前の PHP がサポートしていた空間です。
  • PHP: エイリアス/インポート - Manual

    名前空間の使用法: エイリアス/インポート (PHP 5 >= 5.3.0, PHP 7, PHP 8) 外部の完全修飾名をエイリアスで参照したりインポートしたりする機能は、 名前空間において非常に重要なものです。 これは、Unix 系のファイルシステムでファイルやディレクトリへのシンボリックリンクを作成することに似ています。 PHP は定数、関数、クラス、インターフェイス、トレイト、列挙型(Enum)、名前空間のエイリアスやインポートをサポートしています。 エイリアス作成には use 演算子を使用します。 ここに、5 種類すべてのインポート方法の例を示します。 <?php namespace foo; use My\Full\Classname as Another; // これは use My\Full\NSname as NSname と同じです use My\Full\NSname

    Itisango
    Itisango 2023/08/10
    定数、関数、クラス、インターフェイス、トレイト、列挙型(Enum)、名前空間のエイリアスやインポートをサポートしています。エイリアス作成には use 演算子を使用します。 5 種類すべてのインポート方法の例を示し
  • PHP: namespace キーワードおよび __NAMESPACE__ - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    現在の名前空間内の要素へのアクセスを抽象化するための方法が 2 通りあります。 マジック定数 __NAMESPACE__ および namespace キーワードがそれです。 __NAMESPACE__ の値は文字列で、現在の名前空間の名前が格納されます。
  • PHP: 名前空間と動的言語機能 - Manual

    名前空間と動的言語機能 (PHP 5 >= 5.3.0, PHP 7, PHP 8) PHP における名前空間の実装は、PHP 自身が動的プログラミング言語であるという性質に影響を受けています。 したがって、次の例のようなコードを名前空間を使って書き直すには <?php class classname { function __construct() { echo __METHOD__,"\n"; } } function funcname() { echo __FUNCTION__,"\n"; } const constname = "global"; $a = 'classname'; $obj = new $a; // classname::__construct と表示します $b = 'funcname'; $b(); // funcname と表示します echo consta

    Itisango
    Itisango 2023/08/10
    PHP における名前空間の実装は、PHP 自身が動的プログラミング言語であるという性質に影響を受けています。
  • PHP: 基本編 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    クラス名を参照するには3 つの方法があります。
  • PHP: 同一ファイル内での複数の名前空間の定義 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    複数の名前空間をひとつのファイルに記述するようなコーディングはできるだけ避けるべきです。 主な使い道としては、複数の PHP スクリプトをひとつのファイルにまとめるときくらいでしょう。
  • PHP: サブ名前空間 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    <?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?> 上の例は、定数 MyProject\Sub\Level\CONNECT_OK とクラス MyProject\Sub\Level\Connection、 そして関数 MyProject\Sub\Level\connect を作成します。
  • PHP: 名前空間 - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    実際に名前空間の影響を受けるのはクラス (抽象クラスやトレイトを含む) とインターフェイス、関数、そして定数だけ。名前空間を宣言するには namespace を使用。名前空間を含むファイルでは、先頭で名前空間を宣言
  • PHP: 概要 - Manual

    名前空間の概要 (PHP 5 >= 5.3.0, PHP 7, PHP 8) 名前空間とは何でしょう? 広義の「名前空間」とは、項目をカプセル化するもののことです。 これは多くの場面で見られる抽象概念です。 たとえば、たいていの OS はディレクトリでファイルをグループ化します。 この場合、ディレクトリがその中のファイルの名前空間として機能しています。 具体的に言うと、foo.txt というファイルは /home/greg と /home/other の両方に存在することが可能ですが、それらふたつの foo.txt を同じディレクトリに配置することはできません。 さらに、/home/greg ディレクトリの外から foo.txt にアクセスするには、ディレクトリ名をファイル名の前につけて /home/greg/foo.txt としなければなりません。 プログラミングの世界における名前空間も

    Itisango
    Itisango 2023/08/10
    名前空間の名前は、大文字小文字を区別しません。 注意: 名前空間の名前として PHP や これらで始まる名前 (PHP\Classes など) は 言語の内部で使うために予約されており、ユーザーのコードで使うべきではありません。
  • PHP: 共変性と反変性 - Manual

    共変性と反変性 PHP 7.2.0 で、子クラスのメソッドの引数の型の制限を除く形で、反変性が一部サポートされました。 PHP 7.4.0 以降で、共変性と反変性が完全にサポートされるようになりました。 共変性とは、子クラスのメソッドが、親クラスの戻り値よりも、より特定の、狭い型を返すことを許すことです。 一方で、反変性とは、親クラスのものよりも、より抽象的な、広い型を引数に指定することを許すものです。 型宣言は以下の場合に、より特定の、狭い型であると見なされます: union 型 から、特定の型が削除されている場合 特定の型が 交差型 に追加されている場合 クラスの型が、子クラスの型に変更されている場合 iterable が 配列 または Traversable に変更されている場合 上記と反対のことが当てはまる場合は、より抽象的な、広い型であると見なされます。 <?php abstra

    Itisango
    Itisango 2023/08/10
    7.4.0 以降で、共変性と反変性がサポートされる。共変性とは、子クラスのメソッドが、親クラスの戻り値よりも、狭い型を返すことを許す。反変性とは、親クラスのものよりも、広い型を引数に指定することを許す。
  • PHP: オブジェクトのシリアライズ - Manual

    オブジェクトのシリアライズ - セッション内でのオブジェクト serialize() は、 PHP で保存できるあらゆる値をバイトストリームで表した文字列を返します。 unserialize() を使うと、 この文字列から元の変数の値を取り出すことができます。 オブジェクトをシリアライズすると、オブジェクト内の変数もすべて保存されます。 オブジェクト内のメソッドは保存されません。 クラス名のみが保存されます。 オブジェクトを unserialize() するには、 そのオブジェクトのクラスが定義されている必要があります。 A クラスのオブジェクトをシリアライズしたのなら、 その文字列にはクラス A とその中のすべての変数の値が含まれています。 別のファイルでそれを復元してクラス A のオブジェクトを取り出すには、 まずそのファイル内にクラス A の定義が存在しなければなりません。 これを実

    Itisango
    Itisango 2023/08/10
    アプリケーション内でオブジェクトをシリアライズして再利用する場合のお勧めは、 そのクラスの定義をアプリケーション全体で include することです。 クラスの定義が存在しなければオブジェクトの復元に失敗してし
  • PHP: オブジェクトと参照 - Manual

    Notes on reference: A reference is not a pointer. However, an object handle IS a pointer. Example: <?php class Foo { private static $used; private $id; public function __construct() { $id = $used++; } public function __clone() { $id = $used++; } } $a = new Foo; // $a is a pointer pointing to Foo object 0 $b = $a; // $b is a pointer pointing to Foo object 0, however, $b is a copy of $a $c = &$a; //

    Itisango
    Itisango 2023/08/10
    PHP でのオブジェクト指向プログラミングのポイントとしてよく言われるのは 「オブジェクトはデフォルトでは参照渡しとなります」ということです。 しかし、正確には少し異なります。
  • PHP: 遅延静的束縛 (Late Static Bindings) - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    遅延静的束縛と呼ばれる機能が搭載されています。 静的継承のコンテキストで呼び出し元のクラスを参照できるようになります。より正確に言うと、遅延静的束縛は直近の "非転送コール" のクラス名を保存します
  • PHP: オブジェクトの比較 - Manual

    オブジェクトの比較 比較演算子(==)を使用する際、 オブジェクト変数は、単純に比較されます。つまり、 二つのオブジェクトのインスタンスは、 同じ属性と値 (値の比較は == によるもの) を有し、同じクラスのインスタンスである場合に、 等しいとされます。 一致演算子(===)を使用する場合、 オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、 等しいとされます。 これらのルールを明確に示す例を以下に示します。 <?php function bool2str($bool) { if ($bool === false) { return 'FALSE'; } else { return 'TRUE'; } } function compareObjects(&$o1, &$o2) { echo 'o1 == o2 : ' . bool2str($o1 == $o2) . "

    Itisango
    Itisango 2023/08/10
    比較演算子(==)を使用する際、 オブジェクト変数は、単純に比較されます。 二つのオブジェクトのインスタンスは、 同じ属性と値 (値の比較は == によるもの) を有し、同じクラスのインスタンスである場合に、 等しい
  • PHP: オブジェクトのクローン作成 - Manual

    オブジェクトのクローン作成 オブジェクトのコピーを作成する際、そのプロパティも全て二重化することが、 常に望ましい動作であるわけではありません。 コピーコンストラクタが必要となる例として、 GTKウインドウを表すオブジェクトを有しており、 そのオブジェクトがGTKウインドウのリソースを保持している際、 コピーを作成する時に、同じプロパティを有するウインドウを作成し、 その新しいオブジェクトがその新しいウインドウのリソースを保持する ようにしたい場合が考えられます。 他の例としては、 オブジェクトがそのオブジェクトが使用する他のオブジェクトへのリファレンスを 保持しており、親オブジェクトをコピーする際に、そのコピーが独立したオブジェクトの コピーを有するように、そのオブジェクトのインスタンスを新たに作成したい場合が 考えられます。 オブジェクトのコピーは、clone キーワード (これは、そ

    Itisango
    Itisango 2023/08/10
    オブジェクトのコピーは、clone キーワード (これは、そのオブジェクトの __clone() メソッドがある場合にこれをコールします)により作成されます。 $copy_of_object = clone $object;
  • PHP: finalキーワード - Manual

    finalキーワード キーワード final を前に付けて定義されたメソッドや定数は、子クラスから上書きできません。 クラス自体がfinalと定義された場合には、このクラスを拡張することはできません。 <?php class BaseClass { public function test() { echo "BaseClass::test() called\n"; } final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } } class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called\n"; } } // Results in

    Itisango
    Itisango 2023/08/10
    プロパティを final として宣言することはできません。 final として宣言できるのはクラスとメソッド、 および定数(PHP 8.1.0以降)だけです。 PHP 8.0.0 以降は、private メソッドを final として宣言できるのはコンストラクタだけ
  • PHP: マジックメソッド - Manual

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    Itisango
    Itisango 2023/08/10
    ある動作がオブジェクトに対して行われた場合に、 PHP のデフォルトの動作を上書きする特別なメソッドです。 警告 __ で始まる全てのメソッドは、 PHP によって予約されています。
  • PHP: オブジェクトの反復処理 - Manual

    By reading the posts below I wondered if it really is impossible to make an ArrayAccess implementation really behave like a true array ( by being multi level ) Seems like it's not impossible. Not very preety but usable <?php class ArrayAccessImpl implements ArrayAccess { private $data = array(); public function offsetUnset($index) {} public function offsetSet($index, $value) { // echo ("SET: ".$in

    Itisango
    Itisango 2023/08/10
    PHP は、たとえば foreach 命令などによる反復処理を可能とするように、 オブジェクトを定義する手段を提供します。 デフォルトで、 全ての アクセス権限がある プロパティは、反復処理に使用することができます。
  • PHP: オーバーロード - Manual

    オーバーロード PHP におけるオーバーロード機能は、 プロパティやメソッドを動的に 作成する ための手法です。 これらの動的エンティティは、マジックメソッドを用いて処理されます。 マジックメソッドは、クラス内でさまざまなアクションに対して用意することができます。 オーバーロードメソッドが起動するのは、 宣言されていないプロパティやメソッドを操作しようとしたときです。 また、現在のスコープからは アクセス不能な プロパティやメソッドを操作しようとしたときにも起動します。 このセクションでは、これらの (宣言されていない、 あるいは現在のスコープからはアクセス不能な) プロパティやメソッドのことを アクセス不能プロパティ および アクセス不能メソッド と表記することにします。 オーバーロードメソッドは、すべて public で定義しなければなりません。 注意: これらのマジックメソッドの引数

    Itisango
    Itisango 2023/08/10
    PHP における オーバーロード の解釈は、他の多くのオブジェクト指向言語とは異なります。 一般的に「オーバーロード」とは、 「名前は同じだけれども引数の数や型が異なるメソッドを複数用意できる」 という機能のこと
  • PHP: トレイト - Manual

    トレイト PHP は、コードを再利用するための「トレイト」という仕組みを実装しています。 トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。 トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。 トレイトとクラスを組み合わせた構文は複雑さを軽減させてくれ、 多重継承や Mixin に関連するありがちな問題を回避することもできます。 トレイトはクラスと似ていますが、トレイトは単にいくつかの機能をまとめるためだけのものです。 トレイト自身のインスタンスを作成することはできません。 昔ながらの継承に機能を加えて、振る舞いを水平方向で構成できるようになります。 つまり、継承しなくてもクラスのメンバーに追加できるようになります。 <?php trait ezcReflect

    Itisango
    Itisango 2023/08/10
    トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。