ホームページ > バックエンド開発 > PHPチュートリアル > PHP のオブジェクト指向、パターンと実践の高度な機能についての深い理解 (1)

PHP のオブジェクト指向、パターンと実践の高度な機能についての深い理解 (1)

黄舟
リリース: 2023-03-06 19:18:02
オリジナル
1426 人が閲覧しました

静的メソッドとプロパティ

オブジェクトを介してメソッドとプロパティにアクセスできるだけでなく、クラスを介してアクセスすることもできます。このようなメソッドとプロパティは「静的」(static) であり、static キーワードを使用して宣言する必要があります。

class StaticExample{    
static public $aNum=0;    
static public function sayHello()    
{        
self::$aNum++;        
print "hello (".self::$aNum.")/n";    
}
}
print StaticExample::$aNum;StaticExample::sayHello();
ログイン後にコピー

静的メソッドは、クラスをスコープとする関数です。これらのプロパティはオブジェクトに属しているため、静的メソッドはこのクラスの通常のプロパティにアクセスできませんが、静的プロパティにはアクセスできます。静的プロパティを変更すると、クラスのすべてのインスタンスが新しい値にアクセスできるようになります。静的要素にアクセスするときは、:: を使用してクラス名と属性、またはクラス名とメソッドを接続します。現在のクラスから静的メソッドまたはプロパティにアクセスするには、self キーワードを使用できます。 self は、疑似 変数 $this が現在のオブジェクトを指すのと同様に、現在のクラスを指します。定義上、オブジェクト内で静的メソッドを呼び出すことはできないため、静的メソッドおよびプロパティはクラス変数およびプロパティとも呼ばれます。そのため、静的メソッドでは疑似変数を使用できません。

以下は、ShopProduct クラスの静的メソッドを構築して、ShopProduct オブジェクトを自動的にインスタンス化します。 sqlite を使用して、次のようにテーブル プロダクトを定義します。

CREATE TABLE products(    
id INTEGER PRIMARY KEY AUTOINCREMENT,    
type TEXT,    
firstname TEXT,    
mainname TEXT,    
title TEXT,    
price float,    
numpages int,    
playlength int,    
discount int )
ログイン後にコピー

以下の getInstance() メソッドを構築します。このメソッドのパラメーターは、データベース レコードの ID と pdo オブジェクト です。これらを使用してデータベースからレコードの行を取得し、ShopProduct オブジェクトを返します。

//ShopProduct类, 
private $id = 0;    
//...    
public function setID($id)    
{        
$this->$id;    
}    
//...   
 public static function getInstance($id, PDO $pdo)    
 {        
 $stmt   = $pdo->prepare("select * from products where id=?");        
 $result = $stmt->execute(array($id));        
 $row    = $stmt->fetch();        
 if (empty($row)) {            
 return null;        
 }        
 if ($row['type'] == "book") {            
 $product = new BookProduct(                
 $row['title'],                
 $row['firstname'],                
 $row['mainname'],                
 $row['price'],                
 $row['numpages']            
 );       
  } else if ($row['type'] == "cd") {            
  $product = new CdProduct(                
  $row['title'],                
  $row['firstname'],                
  $row['mainname'],                
  $row['price'],                
  $row['playlength']            
  );        
  } else {            
  $product = new ShopProduct(                
  $row['title'],                
  $row['firstname'],                
  $row['mainname'],                
  $row['price']            
  );        
  }        
  $product->setID($row['id']);        
  $producerMainName->setDiscount($row['discount']);       
   return $product;    
   }    
   //...
ログイン後にコピー

有効な PDO オブジェクトがある限り、プログラムのどこでもこのメソッドを呼び出すことができます:

$dsn = "sqlite://home/bob/projects/products.db";$pdo = new PDO($dsn, null, null);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$obj = ShopProduct::getInstance(1, $pdo);
ログイン後にコピー

このようなメソッドは、生データ (データの列や構成情報など) を受け入れることができる「ファクトリー」のようなものです。 )、これに基づいてオブジェクトを生成します。

PHP5 ではクラス内で constant 属性を定義できます。定数属性は const キーワードで宣言されます。定数は、通常のプロパティのようにドル記号で始まりません。慣例により、定数の名前には大文字のみを使用できます。定数属性には基本的な データ型 のみを含めることができ、定数属性にはクラスを介してのみアクセスできます。

りー

以上がPHP のオブジェクト指向、パターンと実践の高度な機能についての深い理解 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート