オブジェクト指向オブジェクトの 3 つの主要な特徴: カプセル化、継承、およびポリモーフィズム まず、抽象化について簡単に理解しましょう:
先ほどクラスを定義したとき、実際にオブジェクトのクラスの共通の属性と動作を抽出しました。物理モデル (テンプレート)、問題を研究するこの方法は抽象化と呼ばれます
1. カプセル化
カプセル化とは、抽出されたデータとデータに対する操作をカプセル化することです。は内部的に保護されており、プログラムの他の部分からの承認された操作 (メソッド) のみがデータに対して操作できます。
php は 3 つのアクセス制御修飾子を提供します。
public はグローバルを意味し、このクラス内、クラス外、およびサブクラスからアクセス可能です。
protected は保護されていることを意味し、このクラスまたはサブクラスのみがアクセスできます。
private はプライベートを意味し、のみアクセスできますこのクラス内でアクセスできます
上記の 3 つの修飾子はメソッドとプロパティ (変数) の両方を変更できます。メソッドにアクセス修飾子がない場合は、デフォルトで public を指定する必要があります。この方法もあります。 PHP4 では var $name を記述します。これはパブリック属性を意味します。
例:
コードをコピーします。 コードは次のとおりです。 :
class person{
public $name;
private $salary; __construct; $age ,$salary){
$this->name=$name;
$this->salary=$salary;
public function showinfo(){
//これは、3 つの修飾子すべてがこのクラス内で使用できることを意味します
echo $this->name."||".$this->age." | |".$this->salary;
}
}
$p1=new Person('Zhang San',20,3000);
//これはクラス外ですので、次のメソッドを使用すると、年齢と給与にアクセスするときにエラーが報告されます。
それでは今やりたいのは、外部からprotected要素やprivate要素やメソッドにアクセスする場合はどうするかということです。 通常のアプローチは、パブリック関数を通じてこれらの変数形式にアクセスすることです。
public function setxxxx($val){
$this->gt;xxxx=$val;
public function getxxxx(){
return $this-> >salary; // 拡張機能: ユーザー名などの判断など、ここでいくつかのメソッドを呼び出し、それが正しい場合にのみアクセスを許可できます
$p1->getsalary();
If protected および private にアクセスするには、次のメソッドを使用することもできますが、これらは推奨されません。
__set() および __get ()
__set() 値を protected 属性または private 属性に割り当てます。
__set( $name,$val);
__get() は protected または private の値を取得します
__get($name) ;
例:
コードをコピーします
コードは次のとおりです:
クラスtesta{
protected $name;
//すべての属性を管理するには __set() を使用します
public function __set($pro_name,$pro_val){
//上記の $pro_name と $pro_val はカスタマイズできます//$this->pro_name 以下は確立されており、変更できません$this->pro_name =$pro_val; } //すべての属性値を取得するには __get() を使用します
パブリック関数 __get($pro_name){if(isset($pro_name)){
return $this->pro_name;
} else {
return null; 🎜>}
}
$n1=new testa();
//通常、保護された属性はクラス外からアクセスできませんが、上記のメソッドを使用して操作できます
$n1- >name='小三';
echo $n1->name; >
// を使用することはお勧めできません。 it
2. 継承
まず例を見てみましょう:
コードをコピーします
コードは次のとおりです:
class Pupil{
public $name;
protected $age; public function getinfo(){ echo $this-> name.'||'.$this->age;
}
public function testing(){
echo 'this is students'; } } class 卒業生{ public
protected $age;public function getinfo(){
echo $this->
}
public function testing(){
echo 'this is Grade';
}
}
?> ;
上記からわかるようにたとえば、複数のクラスに共通の属性やメソッドが多い場合、コードの再利用性が高くなく、コードが冗長になります。 CSS での処理方法を考える
解決策: Inherit
Copyコード
コードは次のとおりです:
class Students{
public $name;
public $age;
public function __construct($name,$age){
$this- >name=$name;
$this->age=$age;
}
public function showinfo(){
echo $this->name.'||'.$ this->age;
}
}
class Pupil extends Students{
function testing(){
echo '生徒 '.$this->name.' はテスト中です';
}
}
class Grade extends Students{
function testing(){
echo 'Graduate '.$this->name.' is testing'; >}
$stu1=new Pupil('张三',20);
$stu1->showinfo();
echo '
'; >testing();
?>
上記からわかるように、継承は親クラスをパブリックに拡張し、親クラスで保護されるサブクラス ( BaseClass) 属性とメソッドは継続され、プライベートな属性とメソッドを継承できません
構文構造:
class サブクラス名 extends 親クラス名 {}
詳細:
1 、サブクラスは 1 つの親クラスのみを継承できます (ここでは直接継承を指します)。複数のクラスの属性とメソッドを継承したい場合は、マルチレベル継承
を使用できます。 例:
コードをコピーします
コードは次のとおりです。 class A{
public $name='AAA'; 🎜>}
クラス B は A を拡張します{
public $age=30;
クラス C は B を拡張します{}
$p=new C(); ->name;//ここでは AAA が出力されます
?>2. サブクラス オブジェクトを作成するとき、その親クラスのコンストラクターはデフォルトでは自動的に呼び出されません。 > 例:
class A{
public function __construct(){
echo 'A';
}
}
class B extends A{
public function __construct() {
}
}
$b=new B();//B にコンストラクターがない場合は、 の A が出力されます。 3. サブクラス内の親クラスのメソッドにアクセスする必要がある場合 (コンストラクターおよびメンバー メソッドの修飾子がプロテクトまたはプライベートである場合)、親クラス::メソッド名または親:: を使用できます。完了するメソッド名 [ここで親と前の前提] 受け取った自分自身はすべて小文字で、エラーは大文字で報告されます]
class A{
public function test(){
echo 'a_test';
}
}
class B extends A{
public function __construct(){
//両方のメソッドが機能します
A::test()
parent:: test();
}
}
$b=new B();
5. サブクラス (派生クラス) のメソッドが親クラスのメソッドとまったく同じである場合 ( public、protected)、これをメソッド カバレッジまたはメソッド オーバーライドと呼びます。
3. ポリモーフィズム
例:
をコピーします。 code
コードは次のとおりです。
class Animal{
public $name;
public $price; cry(){
echo 'i don't know' ; } } class Dog extends Animal{ //オーバーライド、オーバーライド
関数 cry(){echo 'Wang Wang!';
Animal::cry();//ここではエラーは報告されず、親クラスの cry() は正しく実行できます。 🎜>$dog1=new Dog();
$dog1->cry( );
概要:
1.すべてのサブクラスにはメソッドがありますが、親クラスがメソッドの書き方を知らない場合は、サブクラスがそのメソッドをオーバーライドできるようにすることができます。メソッドのオーバーライド (書き換え) では、サブクラスのメソッド名とパラメーターの数が正確である必要があります。同じ
2. サブクラスが親クラス (protected/public) のメソッドを呼び出したい場合は、親クラス名::メソッド名または親::メソッド名を使用できます
3. メソッドの書き換えを実装する場合、アクセス修飾子は異なっていても構いませんが、サブクラス メソッドのアクセス権は親クラス メソッドのアクセス権以上でなければなりません (つまり、親クラス メソッドのアクセス権を減らすことはできません)
たとえば、親クラスの public 関数 cry(){} とサブクラスの protected 関数 cry(){} がエラーを報告する場合、
ただし、サブクラスのアクセス許可は次のように拡大できます。
Parentクラスプライベート関数cry(){} サブクラス保護関数cry(){}は正しく実行できます
拡張:
メソッドオーバーロード(オーバーロード)
基本概念:関数名は同じですが、パラメータの数が異なります同じ関数を呼び出した場合でも、異なる関数を区別できます。
PHP5 ではオーバーロードもサポートされていますが、それでも他の言語とは大きく異なります。PHP では複数の関数を定義できません。同じ名前の
PHP5 は強力な「マジック」関数を提供します。これらのマジック関数を使用すると、関数をオーバーロードできます。
ここでは、オブジェクトがメソッドを呼び出すとき、およびメソッドが呼び出されない場合は __call に移動する必要があります。存在する場合、プログラムは自動的に __call を呼び出します
[公式には非推奨]
PHP には次のマジック定数があります: __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ など
例:
コードをコピー
コードは次のとおりです:
class A{
function test1($p){
echo 'test1
';
function test2($ p){
echo 'test2
';
}
function __call($method,$p){
//ここで $p は配列であり、上記の 2 つの変数名前はカスタマイズできます
if($method == 'test'){
if(count($p)==1){
$this->test1($p); else if(count($p)==2){
$this->test2($p)
}
}
}
}
$a=new A ();
$a->test(3,5);

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター
