目次
相关推荐:
ホームページ バックエンド開発 PHPチュートリアル PHPコマンドスペースの名前空間の使い方と用途(例)

PHPコマンドスペースの名前空間の使い方と用途(例)

May 17, 2018 am 10:02 AM
namespace php

この記事では、主に PHP コマンド空間の名前空間の使用法と用途についての実践的な概要を紹介します。必要な方は参考にしてください。

名前空間の最も明確な目的の 1 つは、名前の重複の問題を解決することです。 PHP 名で同じにすることはできません。そうしないと、致命的なエラーが発生します。この場合、名前の重複を避ける限り解決できます。最も一般的な方法は、プレフィックスを合意することです。

名前空間を使用する目的:

チームプロジェクトで作業する場合、個人がプロジェクトを担当する場合は、その前後に作成された新しいクラスとの競合を回避します。

個人的な理解によると、必要なクラスをrequireまたはincludeで先に導入する必要があるため、クラス再定義エラーが発生する前提条件は同名のクラスが2つ導入されていることです。現在、一部の PHP フレームワークは、新しく作成されたすべてのモデル クラスを自動的にロード (つまり、インクルード) するため、新しいモデル クラスとプロジェクト フレームワークのネイティブ コア クラス間の名前の競合を避けるために、名前空間が使用されます。 (よく考えてみると、チームメンバーが作成した新しいクラスとの競合は、コミュニケーションを通じて回避する必要があります。インシデントが発生した後でも、後のクラス理解の混乱による保守の複雑さの増加を避けるために、クラス名をすぐに再調整して保守する必要があります。 )

使用方法と組み合わせることで、その目的をさらに理解できます。

名前空間の使用方法:

テストのために、1.phpとname.php(このファイルはテストを実行するために使用されます)の3つのファイルを作成します。これについては後で説明しません。注意してください。コードを自分で変更します。

1. 名前空間の名前付けの定義は大文字と小文字を区別しません

namespace one;

namespace One;
namespace ONE;

上記のように記述できますが、独自の仕様として選択するだけです。 (次のコードでは、最初の方法をテストに使用します)

2. 名前空間が定義されていない場合は、トップレベルの名前空間を使用するものとみなされます。新しいクラスを作成するときは、クラスの前にバックスラッシュを追加するかどうかを選択できます。

//1.php 
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new Person(); //输出 I am one!;
new \Person(); //输出 I am one!;
ログイン後にコピー

3. 新しいクラスを追加するとき、名前空間を持ち込むときは、スラッシュの代わりにバックスラッシュ文字を使用する必要があります。

記憶方法: % 内のスラッシュを見つける順序に従い、スラッシュとして解釈します。 (バックスラッシュと言っても、どっちの方向なのかも分からないことがあります。昔は左から右への昇順で覚えていましたが、今ではあまりにもあてにならない気がします)

//name.php
require_once './1.php';
new /Person(); // 代码报错:Parse error: syntax error, unexpected '/'
ログイン後にコピー

4. カテゴリは、名前空間に新しいクラスを指定する場合、指定された名前空間を含める必要があります。

指定された名前空間はありません。 ポイント 2 によると、php はトップレベルの名前空間からこのクラスを見つけます。覚えておいてください: 最上位の名前空間には他のすべての名前空間が含まれるため、これは理解できません。代わりに、トップレベルの名前空間は他の名前空間から完全に分離する必要があります。

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
require_once './1.php';
new \one\Person(); //输出 I am one!;
new \Person(); //代码报错:Fatal error: Class 'Person' not found
ログイン後にコピー

は、次の一般的な例で理解できます。指定された名前空間を取ることは、誰かのリンゴ (手に持っている) を表し、最上位の名前空間はリンゴの箱の中のリンゴ (箱の中) を表します。誰かのリンゴを見つけたい場合は、誰かの名前空間を持ってくる必要があります。そうしないと、箱から誰かのリンゴを探すことになりますが、当然見つかりません。

5. 名前空間宣言後のコードはこの名前空間に属しており、include や require があっても影響を受けません(文の後半の理解に重点を置いています。詳細はコードを参照してください)。 。

//1.php 
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
//name.php
namespace test;
require './1.php'; 
new \one\Person(); //输出 I am one!;
new Person(); //这里结果会是什么呢,猜猜看
ログイン後にコピー

最後の行はエラーになります:

Fatal error: Class 'test\Person' not found
ログイン後にコピー

まず第一に、これをポイント 2 と比較してください:

ポイント 2、私が言いました、名前空間がない場合、名前空間がある場合新しいクラス、新しいクラスはありますか? バックスラッシュは同じ意味を持ちます。

ここで、名前空間では、バックスラッシュがあるのとないのとでは意味が異なります。

最後の行を

new \Person();
ログイン後にコピー

に置き換えると、結果はエラーになります:

Fatal error: Class 'Person' not found
ログイン後にコピー

それでは、現在の点について話しましょう。

コードの最後の行に対応する名前空間は test であることがわかります。これは、require ファイルの名前空間の影響を受けません。

検証をさらに強化するために、name.php ファイルを次のように変更しました:

//name.php
namespace test;
require './1.php'; 
class Person{
 function __construct(){
  echo 'I am test!';
 }
}
new \one\Person(); //输出 I am one!;
new Person(); //这里结果会是什么,自己猜猜看
ログイン後にコピー

最後に、この例は、require についての私の理解を新たにしました。

require についての以前の理解によれば、PHP プログラムが実行される前に、まず require で指定されたファイルを読み込み、それを PHP プログラムの Web ページの一部にします。したがって、私はこれを単に抽出したコードを元の場所に戻すだけの置換として理解することがよくあります。次に、1.php ファイルの内容を name.php に入れようとしました:

//name.php
namespace test;
namespace one;
class Person{
 function __construct(){
  echo 'I am one!';
 }
}
class Person{
 function __construct(){
  echo 'I am test!';
 }
}
ログイン後にコピー

新しいクラスがないと、ファイルはエラーを報告します:

致命的なエラー: クラス oneperson を再宣言できません

ようです単純です。require は置換として理解されますが、ここでは機能しません。

6. 名前空間にはクラス名と同じ名前の部分があってもクラスを表すものではありません。新しいクラスの場合でも、この部分を持ってくる必要があります。

//name.php
namespace test\person;
class Person{
 function __construct(){
  echo 'I am test!';
 }
}new \test\person\Person();  //命名空间里person无法代表类名
ログイン後にコピー

しかし、これは全くの余計なことなので、名前空間にクラス名を含めないでください。

7. php ファイルには複数の名前空間が存在でき、最初の名前空間の前にコードを含めることはできません。

只说第一个命名空间前不能有任何代码,之后的命名空间之前可以有代码。这个自行测试即可。

//name.php
namespace test;
echo 'zhai14';
namespace zhai;
require './1.php';
ログイン後にコピー

php命名空间namespace告一段落了,接下来说说use的用途。

使用use的目的:

在命名空间字符串过长时,使用use可以相应的缩短命名空间。

use的使用方法:

1.new类时,最前面无需用反斜杠。此外,use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
namespace animal\cat;
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
new Life(); //按照代码执行顺序,这里默认animal\cat这个命名空间
new \animal\dog\Life(); //A
use animal\dog; //a
new dog\Life(); //B
use animal\dog as d; //b
new d\Life();
ログイン後にコピー

通过A、B行代码比较,需要注意:

使用use后,new类时,最前面没有反斜杠。

没使用use时,命名空间最前面有反斜杠

通过a、b行代码比较,可以理解:

use后没有as时,缩短的命名空间默认为最后一个反斜杠后的内容。如上的:

use animal\dog;

相当于

use animal\dog as dog;

2.namespace后面不建议加类名,但use后可以。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
namespace animal\cat;
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
use animal\dog\Life as dog; 
new dog();
ログイン後にコピー

如上所示,use后加上类名后,就相当于把类改了个名称:由Life改为dog了。

上面不用as dog就会报错:

Fatal error: Cannot use animal\dog\Life as Life because the name is already in use
因为cat下也有个一样名称的Life类。

可以理解为,使用use后,这个昵称对应的类只能归当前命名空间占有,其它命名空间下不允许存在该类。

//name.php
namespace animal\dog;
class Life{
 function __construct(){
  echo 'dog life!';
 }
}
class Dog{
 function __construct(){
  echo 'dog in dog!';
 }
}
namespace animal\cat;
// class Dog{
// function __construct(){
//  echo 'dog in cat!';
//  }
// }
class Life{
 function __construct(){
  echo 'cat life!';
 }
}
use animal\dog; 
new dog\Dog();
ログイン後にコピー

如上,使用了

use animal\dog;
cat

通过上面代码,我想使用use的目的效果(缩短命名空间名称)就很明显了。

简单总结一下:

namespace就是划分领域的作用,代表这些东西是属于某个命名空间下的。

use就是起小名的作用,不论写起来还是说起来都可以省不少事儿。

相关推荐:

PHP命令空间的用法大全

php user_error()函数的简介

有关php user_error()函数的文章推荐10篇

以上がPHPコマンドスペースの名前空間の使い方と用途(例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles