PHP オブジェクトの基本を要約する
この記事では、主にオブジェクト指向関連を紹介する PHP に関する関連知識を紹介します オブジェクト指向プログラミングの本質は、データや関数の操作主体、つまりオブジェクトを増やすことです。みんなが助けてくれることを願っています。
推奨学習:「PHP チュートリアル 」
php、thinkphp、Redis、vue、uni-app などの実践学習テクノロジー、推奨オープンソース電子商取引システム likeshop、アイデアから学ぶことができ、商用利用は無料で著作権にアクセスできます、gitee ダウンロード アドレス:
クリックしてプロジェクト アドレスを入力してください
オブジェクト指向: OOP(オブジェクト指向プログラミング)プログラミング
プロセス指向とはプログラミングの考え方
オブジェクト指向プログラミングの本質は、データや関数の操作主体、つまりオブジェクトを増やすことです
オブジェクト指向のすべてのデータと関数は、ほとんどが呼び出して操作するサブジェクト (オブジェクト) で構成されています
オブジェクト指向の基本
プロセス指向とオブジェクト指向の違い
- クラス: クラス。オブジェクト指向サブジェクトの最も外側の構造を定義します。サブジェクトのデータをラップするために使用され、関数 (関数)
- オブジェクト: インスタンスとも呼ばれる、特定のタイプのトランザクションの特定の代表であるオブジェクト
- インスタンス化: 新しい、クラスからオブジェクトを生成するプロセス
- クラスメンバー: member
- メソッド: メソッド。基本的には、メンバーメソッドまたはメンバー関数と呼ばれる、クラス構造内に作成される関数です。
- 属性: プロパティ。基本的に、クラス内に作成される変数です。メンバ変数と呼ばれる構造体
- クラス定数: const、基本的にクラス構造体で作成されます。 定数
<?phpclass People{}$man=new People();# 实例化类,man就是对象var_dump($man);?> # 输出object(People)#1 (0) { } #1表示:对象编号,与类无关,是整个脚本中对象的序号(0)表示:成员变量(属性)个数{}表示:具体成员变量信息(键值对)
<?phpclass Buyer{
# 常量声明
const BIG_NAME='BUYER';
# 常量不需要加 $
# 属性声明
# $name;
# 错误的,类内部属性必须使用访问修饰限定符
public $name;
public $money=0;
# 方法声明
function display(){
echo __CLASS__;
# 魔术常量,输出类名
# 方法内部变量属于局部变量
}}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?>
# 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }
ログイン後にコピー
注: クラス定数はオブジェクトによってアクセスされませんアクセス変更修飾子プロパティまたはメソッドの前の変更キーワード。プロパティまたはメソッドのアクセス場所を制御するために使用されます。
<?phpclass Buyer{ # 常量声明 const BIG_NAME='BUYER'; # 常量不需要加 $ # 属性声明 # $name; # 错误的,类内部属性必须使用访问修饰限定符 public $name; public $money=0; # 方法声明 function display(){ echo __CLASS__; # 魔术常量,输出类名 # 方法内部变量属于局部变量 }}# 实例化$a = new Buyer();# 属性操作,增删改查echo $a->money;$a->money='20';$a->sex='male';unset($a->name);echo '<br>';# 方法操作$a->display();echo '<br>';var_dump($a);?> # 输出0Buyerobject(Buyer)#1 (2) { ["money"]=> string(2) "20" ["sex"]=> string(4) "male" }
- public: パブリック、クラスの内部と外部の両方 Access
- protected: 保護され、関連するクラス内でのみアクセスが許可されます
- private: プライベート、のみ定義クラス内でのアクセスを許可します。
- #アクセス変更修飾子によって変更された任意のメンバーにアクセスできます
- プライベート メンバーはパブリック メソッドを通じてアクセスされます (パブリック メソッドはクラスの外部からアクセスできます)
<?phpclass Article{ protected $name = 'a'; private $type = 'art'; public function get_name() { var_dump($this); }}$a = new Article();var_dump($a);?> # 输出object(Article)#1 (2) { ["name:protected"]=> string(1) "a" ["type:private"]=> string(3) "art" }
構築方法
- __construct() はシステム組み込みのマジック メソッドです。このメソッドの特徴は、オブジェクトがインスタンス化された直後にオブジェクトが自動的にこのメソッドを呼び出すことです
- コンストラクターの目的は次のとおりです。オブジェクト プロパティやその他のリソースを含むリソースを初期化します。
- コンストラクターが定義され、コンストラクターに独自のパラメーターが指定されると、新しいクラス名 (パラメーター リスト) メソッドのみを使用して、正しくインスタンス化してください
- マジック メソッドはオブジェクトから直接呼び出して呼び出すこともできますが、実用的ではありません
-
<?phpclass Article{ public $name='xiaoli'; private $sex="male"; public function __construct($name,$sex) { $this->name = $name; $this->sex = $sex; }}$a = new Article('xiaowang', 'famale');var_dump($a);?>
ログイン後にコピーDestructorオブジェクトが破棄されると自動的に呼び出されるメソッド
- オブジェクトの破棄
- オブジェクトには変数がありません。 ポインティング (変数は他のデータを指します)
- オブジェクトはアクティブに破棄されます (設定を解除するとオブジェクト変数が破棄されます)
- スクリプトの実行が終了します (リソースが自動的に解放されます)
<?phpclass Article{ protected $name = 'xiaoli'; private $sex = 'famale'; public function __destruct() { // TODO: Implement __destruct() method. echo __FUNCTION__; }}$a=new Article();# 销毁对象$a=1;unset($a);# __destructendecho 'end';?> # 不销毁对象,php在运行结束也会释放资源# end__destruct
ログイン後にコピー値を渡すオブジェクト
定義: オブジェクトを保持する変数を別の変数に代入します
PHP では、オブジェクトの値は参照によって渡されます。つまり、1 つのオブジェクト変数が別の変数に割り当てられ、2 つの変数が同じオブジェクト アドレスを指します。つまり、オブジェクトは 1 つだけです。
範囲解決演算子 (クラス定数アクセス) 「::」を形成する 2 つのコロンがあります。これは、クラスがクラス メンバーの操作を実装するために特別に使用されます
。クラスは直接クラス メンバーへのアクセススコープ解決演算子は、クラス (クラス名) のクラス メンバーにアクセスするために使用されます。
<?phpclass Article{ public $name = 'xiaoli'; public $sex = 'famale';}$a=new Article();$b=$a;var_dump($a,$b);echo '<br>';$a->name="wangxiaohu";var_dump($a,$b);echo '<br>';?> # 输出object(Article)#1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" } object(Article) #1 (2) { ["name"]=> string(6) "xiaoli" ["sex"]=> string(6) "famale" }object(Article) #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" } object(Article) #1 (2) { ["name"]=> string(10) "wangxiaohu" ["sex"]=> string(6) "famale" }
类名::类成员
$对象名::类成员
静态成员
定义:使用 static 关键字修饰的类成员,表示该成员属于类访问
- 静态成员
- 静态属性
- 静态方法
- 静态成员是明确用来给类访问的,而不是对象
- 静态成员只是多了一个 static 关键字修饰,本身也可以被对象访问
- 静态成员同样可以使用不同的访问修饰限定符限定,效果一致
<?phpclass Article{ public static $name = 'hlm'; public static $type = 'art'; public static function getName() { return self::$name; }}# 静态属性$a = new Article();echo Article::$name;# 静态方法echo Article::getName();?>
self关键字
- 在类的内部(方法里面)使用,代替类名的写法
- self 如同 $this 代表内部对象一样,能够在方法内部代替当前类名
- 能够保障用户方便修改类名字
- self 关键字是代替类名,所以需要配合范围解析操作符 ::
<?phpclass Article{ public static function getInstance1() { return new self(); } public static function getInstance2() { return new Article(); }}$a = Article::getInstance1();$b = Article::getInstance2();var_dump($a,$b);?> # 输出object(Article) #1 (0) { } object(Article) #2 (0) { }
类加载
类的访问必须保证类在内存中已经存在,所以需要再用类之前将类所在的 PHP 文件加载到内存中
-
类的加载分为两种
- 手动加载:在需要使用类之间通过 include 将包含类的文件引入到内存
- 自动加载:提前定义好类结构和位置,写好引入类文件代码,在系统需要类而内存不存在的时候想办法让写好的加载类的代码执行(自动加载是自动运行写好的加载类的代码)
-
自动加载两种方式
- 魔术函数 __autoload:系统自动调用,需要传入类名,在函数内部实现类的手动加载(PHP7及之后不建议使用此方法)
function __autoload($classname){ # 找到对应的文件路径和命名规范,手动加载}
ログイン後にコピー- 自定义函数:自己定义类的加载实现,然后通过 spl_autoload_register 注册到自动加载机制(可注册多个自动加载)
# 自定义类加载函数function 自定义函数($classname){ # 找到对应的文件和命名规范,手动加载}#注册自动加载sql_autoload_register('自定义函数名字')
ログイン後にコピー
自动加载要求在声明类的时候有良好的规范
- 类名与文件名一致:类名.php 或者 类名.class.php
- 类文件分类放好
例:手动加载
Article.php
<?phpclass Article{ public function getName(){ return __METHOD__; }}
mian.php
<?php # include 'Article.php';# 直接加载比较消耗资源,而且如果类已经在内存中存在,直接include会报错,建议判断后再加载if(!class_exists('Article')){ include 'Article.php';}$a=new Article();var_dump($a->getName()); # outputstring(16) "Article::getName"
自动加载
- __autoload(不建议使用)
一个系统中,可能类文件会放到不同的路径下,因此一个完整的自动加载函数,应该要进行文件判定功能
<?php function __autoload($classname){ # 形参代指 类名 #组织文件路径,假设当前路径下,有两个文件夹下都有类c和类m $c_file = 'c/' . $classname . '.php'; if (file_exists($c_file)) { include_once($c_file); return true; } //if 语句如果只有一行不需要加 {} //include_once 只加载一次 $m_file = 'm/' . $classname . '.php'; if (file_exists($m_file)) { include_once($m_file); return true; } } $a=new Article(); $b=new Article();
- spl_autoload_register
<?phpfunction autoload01($classname){ if(!class_exists($classname)){ $file_name=$classname.'.php'; if(file_exists($file_name)) include_once $file_name; }}spl_autoload_register('autoload01');$a=new Article();
对象克隆
通过已有的对象复制一个新的同样的对象,但两者之间并非同一个对象
面向对象高级
面向对象三大特性
封装、继承、多态
类的封装
类的继承
inherit,子类合法拥有父类的某些权限
- 继承必须满足继承关系:即存在合理的包含关系
- 继承的本质是子类通过继承可以直接使用父类已经存在的数据和数据操作
- PHP 使用 extends 关键字表示继承
子类也称派生类
父类也称基类
# 父类class Human{}# 子类继承class Man extends Human{}
类的多态
多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果
- 需要发生类的继承,同时出现方法的重写(override),即子类拥有与父类同名的方法
- 在实例化对象的时候让父类对象指向子类对象(强制类型,PHP不支持,PHP 弱类型很灵活)
- 结果:父类对象表现的子类对象的特点
—PHP继承—
<?phpclass Human{ public function show(){ echo __METHOD__; }}class Man extends Human{}$m=new Man;$m->show();
有限继承
子类在继承父类的成员时,并非继承所有内容,而是继承并使用父类部分内容
- PHP における継承の本質はオブジェクトの継承です。
- PHP における継承されたコンテンツ: すべてのパブリック メンバー、保護されたメンバー、および親クラスのプライベート プロパティ、プライベート メソッドは継承できません
- 保護されたメンバーは継承専用であり、親クラスまたはサブクラス内でアクセスできます。
- プライベート メンバーは、所属するクラスでパブリック メソッドまたは保護されたメソッドを設定することによってのみアクセスできます
- Constructionメソッドとデストラクター メソッドはサブクラスによって継承できます。
override Override
override、サブクラスは親クラスと同じ名前のメンバーを定義します
- PHP の継承では、継承できないのは Private メソッドのみです。 ##PHP では、親クラスでのコンストラクターとデストラクターの継承が可能です
- ##静的遅延バインディング
最終クラス Final
final キーワードを使用してクラス名を変更し、このクラスが継承できないことを示します
抽象クラス Abstract
A クラスabstract キーワードで変更すると、クラスは継承のみ可能でインスタンス化できないことを示します。
#異なるクラス間に共通のコードはあるが、クラス間に継承関係がない場合に適用されます。この場合、共通のコードは次のようになります。 特性には、クラスが所有できる内部メンバー、プロパティ (静的メソッドを含む)、メンバー メソッド (静的メソッドと抽象メソッドを含む) を含めることができますが、クラス定数を含めることはできません
特性はコードの再利用に使用されます。インスタンス化や継承はできません。
特性は同じ名前です。
クラスには複数の特性を導入する必要があり、同じ名前が別のクラスに表示される場合があります。特性
インターフェース特別に使用されるインターフェース一部の共通クラスが実装する必要があるメソッドを標準化します- クラス クラス名実装インターフェイス名{}
#インターフェイス メンバー
インターフェイス メンバーは 2 つのタイプのみを持つことができます#一般的なインターフェイス メソッド (通常のメソッドと静的メソッド)
#PHP オーバーロード- オーバーロードの意味同じ名前の複数のメソッドがクラス内に存在する可能性があり、パラメーターの数と型が互いに異なること
フォールト トレランスに使用される
属性のオーバーロード
オブジェクトが存在しないプロパティ、または権限が不十分なプロパティにアクセスする場合、コードが誤らないようにマジック メソッドが自動的にトリガーされます。オーバーロード マジック メソッド__isset(属性名): 存在しない、または権限が不十分な属性を判断するときにトリガーされます
__unset(属性名): 存在しない、または権限が不十分な属性を削除します不十分な属性がある場合にトリガーされます __tostring(): 文字列として扱われます- メソッド オーバーロード
- オブジェクトまたはクラス アクセスが存在しませんまたは権限が不十分なメソッド。コードをエラーなくするために自動的にトリガーされるマジック メソッドです。
- __cal(方法名,方法参数列表):调用不存在或者权限不够的方法时触发
- __callStatic(方法名,方法参数列表):调用不存在或者权限不够的静态方法时触发
对象遍历
将对象中的所有属性以键值对的形式取出并进行访问
对象是一种复合数据类型,对象中真正保存的内容是属性
对象的属性本质也是一种键值对关系:名字 = 值
对象遍历就是利用 foreach 对对象中的属性进行取出解析
-
对象遍历遵循访问修饰限定符的限定:即类外只能遍历所有共有属性
foreach(对象变量 as [属性名变量 =>] 属性值变量){ #属性名变量代表取出的每个属性的名字 #属性值变量代表取出的每个属性的值}
ログイン後にコピー
Iterator 迭代器
生成器
yield 关键字
设计模式
design pattern,是软件开发人员在软件开发过程中问题的解决方法
单例模式
singleton,是一种类的设计只会最多产生一个对象的设计思想
保证资源唯一性
工厂模式
。。。。。。
命名空间
namespace,指人为的将内存进行分隔,让不同内存区域的同名结构共存,从而解决在大型项目能出现重名结构问题
基础语法:
namespace 关键字定义空间
命名规则
字母、数字、下划线,不能以数字开头
命名空间必须写在所有代码之前,定义了一个,之后可以定义多个
子空间
subspace,即在已有空间之上,再在内部进行空间划分
子空间直接通过 namespace+路径符号 \ 实现
非限定名称
直接访问元素本身,代表当前所属空间(当前目录)
限定名称
使用空间名+原名,代表访问当前空间子空间(当前目录子目录)
完全限定名称
从根目录(全局空间)开始访问,使用 \ 作为全局空间开始符号(根目录)
全局空间元素访问:使用完全限定名称访问
命名空间引入
推荐学习:《PHP视频教程》
以上がPHP オブジェクトの基本を要約するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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で後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

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