PHP_PHP チュートリアルの Collection クラスの設計の簡単な分析
.net
collection
php
長年
開発する
使用
の
親切
デザイン
私は長年 .net を使って開発をしてきましたが、最近 php に触れるようになり、php もとても楽しいことに気づきました。ただし、そこには Collection クラスはなく、配列だけがあり、配列は非常に強力であることがわかりました。ここでは、配列を使用してコレクションにラップします。 コードは次のとおりです。
コードをコピーします。 コードは次のとおりです。
class Collection{ private $_members=array(); public function additem($ obj、$ key = null)
"key" $ key "既に使用!"); function removeitem($ key) );
Return $ this->members[$key]
パブリック関数キー()
{
return array_keys($ this->_members)
}
public function Legth()
{
Return (isset) ($this ->_members[$key]));
}
}
次に、このコレクションが使いやすいかどうかをテストしてみましょう。
最初にコレクション要素クラスを作成します コース:
コードをコピーします
コードは次のとおりです:
クラス コース
{
プライベート $_id;
プライベート $_courseCode;
プライベート $_name;
public function __construct($id,$courseCode,$name)
{
$this->_id=$id;
$this->_courseCode=$courseCode;
$this->_name=$name;
}
public function getName()
{
return $this->_name;
}
public function getID()
{
return $this->_id;
}
public function getCourseCode()
{
return $this->_courseCode;
}
public function __toString()
{
return $this->_name;
}
}
测试代码如下:
$courses=new Collection();
$courses->addItem(new Course(1, "001", "语文"),1);
$courses->addItem(new Course(2, "002", "数学"),2);
$obj=$courses->getItem(1);
$obj を印刷します。
私たちは、このセットの種類が私たちの平日公開の要求を満たすことができると考えています。
私がいる可能性があります。非常に多くのコースがあり、ただし、コースを受講する前にコースをロードしないことを希望します。つまり、生徒を模範するときのコースの数は 0 であり、コースが必要なときに対応するデータをデータベースから取得する必要があります。コレクションを取得する必要があります。
修正後のコレクションコードは以下の通り:
"key" $ key "既に使用!"); function removeitem($ key) );
Return $ this->members[$key]
パブリック関数キー()
{
return array_keys($ this->_members)
}
public function Legth()
{
Return (isset) ($this ->_members[$key]));
}
}
次に、このコレクションが使いやすいかどうかをテストしてみましょう。
最初にコレクション要素クラスを作成します コース:
コードをコピーします
コードは次のとおりです:
クラス コース
{
プライベート $_id;
プライベート $_courseCode;
プライベート $_name;
public function __construct($id,$courseCode,$name)
{
$this->_id=$id;
$this->_courseCode=$courseCode;
$this->_name=$name;
}
public function getName()
{
return $this->_name;
}
public function getID()
{
return $this->_id;
}
public function getCourseCode()
{
return $this->_courseCode;
}
public function __toString()
{
return $this->_name;
}
}
测试代码如下:
$courses=new Collection();
$courses->addItem(new Course(1, "001", "语文"),1);
$courses->addItem(new Course(2, "002", "数学"),2);
$obj=$courses->getItem(1);
$obj を印刷します。
私たちは、このセットの種類が私たちの平日公開の要求を満たすことができると考えています。
私がいる可能性があります。非常に多くのコースがあり、ただし、コースを受講する前にコースをロードしないことを希望します。つまり、生徒を模範するときのコースの数は 0 であり、コースが必要なときに対応するデータをデータベースから取得する必要があります。コレクションを取得する必要があります。
修正後のコレクションコードは以下の通り:
修正コードは以下の通り:
クラス コレクション {
private $_members = array(); //コレクションメンバー
private $_onload; //コールバック関数のホルダー
private $_isLoaded = false; //コールバックかどうかを示すフラグ
// 呼び出されているかどうかを示すフラグ
public function addItem($obj, $key = null) {
$this->gt;_checkCallback(); //_checkCallback は少し後で定義されます
if($key) {
if(isset($this->_members[$key])) {
throw new KeyInUseException("Key "$key" はすでに使用されています!" );
} else {
$this->_members[$key] = $obj;
}
} else {
$this->_members[] = $obj;
}
}
public function RemoveItem($ key) {
$this->_checkCallback();
if(isset($this->_members[$key])) {
unset($this->_members[$key]);
} else {
throw new KeyInvalidException("無効なキー "$key"!");
}
}
public function getItem($key) {
$this->_checkCallback();
if(isset($this- >_members[$key])) {
return $this->_members[$key];
} else {
throw new KeyInvalidException("無効なキー "$key"!");
}
}
public function key() {
$this->_checkCallback();
return array_keys($this->_members);
}
public function length() {
$this->_checkCallback();
return sizeof($ this->_members);
}
public function names($key) {
$this->_checkCallback();
return (isset($this->_members[$key]));
}
/ **
* このメソッドを使用して、コレクションにアクセスする前に
* 呼び出される関数を定義します。
* 関数はコレクションを
* 唯一のパラメータとして受け取る必要があります。
*/
public function setLoadCallback($functionName, $objOrClass = null) {
if($objOrClass) {
$callback = array($objOrClass, $functionName);
} else {
$callback = $ functionName;
}
// 関数/メソッドが有効であることを確認します
if(!is_callable($callback, false, $callableName)) {
throw new Exception("$callableName is not callable " .
「onload のパラメータとして」);
return false;
}
$this->_onload = $callback;
}
/**
* コールバックが定義されているかどうかを確認し、定義されている場合は、
* すでに呼び出されているかどうかを確認します。 そうでない場合は、
* コールバック関数を呼び出します。
*/
_checkCallback () {
if( isset($this->_onload) && !$this->_isLoaded) {
$this->_isLoaded = true;
call_user_func($this->_onload, $this);
}
}
}
必要な学生次のように:
class CourseCollection extends Collection {
public function addItem(Course $obj,$key=null) {
parent::addItem($obj,$key);
}
}
クラスの生徒{
プライベート $_id;
プライベート $_name;
パブリック $コース;
public function __construct($id,$name)
{
$this->_id=$id;
$this->_name=$name;
$this->course=new CourseCollection();
$this->course->setLoadCallback('loadCourses',$this);
}
public function getName()
{
return $this->_name;
}
public function getID()
{
return $this->_id;
}
public function __toString()
{
return $this->_name;
}
public functionloadCourses(Collection $col)
{
$col->addItem(new Course(1, "001", "语文"),1);
$col->addItem(new Course(2, "002", "数学"),2);
}
}
调用代码如下:
$student=new Student(1, "majiang");
print $student->getName();
print $student->course->getItem(1) );
クラス コレクション {
private $_members = array(); //コレクションメンバー
private $_onload; //コールバック関数のホルダー
private $_isLoaded = false; //コールバックかどうかを示すフラグ
// 呼び出されているかどうかを示すフラグ
public function addItem($obj, $key = null) {
$this->gt;_checkCallback(); //_checkCallback は少し後で定義されます
if($key) {
if(isset($this->_members[$key])) {
throw new KeyInUseException("Key "$key" はすでに使用されています!" );
} else {
$this->_members[$key] = $obj;
}
} else {
$this->_members[] = $obj;
}
}
public function RemoveItem($ key) {
$this->_checkCallback();
if(isset($this->_members[$key])) {
unset($this->_members[$key]);
} else {
throw new KeyInvalidException("無効なキー "$key"!");
}
}
public function getItem($key) {
$this->_checkCallback();
if(isset($this- >_members[$key])) {
return $this->_members[$key];
} else {
throw new KeyInvalidException("無効なキー "$key"!");
}
}
public function key() {
$this->_checkCallback();
return array_keys($this->_members);
}
public function length() {
$this->_checkCallback();
return sizeof($ this->_members);
}
public function names($key) {
$this->_checkCallback();
return (isset($this->_members[$key]));
}
/ **
* このメソッドを使用して、コレクションにアクセスする前に
* 呼び出される関数を定義します。
* 関数はコレクションを
* 唯一のパラメータとして受け取る必要があります。
*/
public function setLoadCallback($functionName, $objOrClass = null) {
if($objOrClass) {
$callback = array($objOrClass, $functionName);
} else {
$callback = $ functionName;
}
// 関数/メソッドが有効であることを確認します
if(!is_callable($callback, false, $callableName)) {
throw new Exception("$callableName is not callable " .
「onload のパラメータとして」);
return false;
}
$this->_onload = $callback;
}
/**
* コールバックが定義されているかどうかを確認し、定義されている場合は、
* すでに呼び出されているかどうかを確認します。 そうでない場合は、
* コールバック関数を呼び出します。
*/
_checkCallback () {
if( isset($this->_onload) && !$this->_isLoaded) {
$this->_isLoaded = true;
call_user_func($this->_onload, $this);
}
}
}
必要な学生次のように:
复制代代码如下:
class CourseCollection extends Collection {
public function addItem(Course $obj,$key=null) {
parent::addItem($obj,$key);
}
}
クラスの生徒{
プライベート $_id;
プライベート $_name;
パブリック $コース;
public function __construct($id,$name)
{
$this->_id=$id;
$this->_name=$name;
$this->course=new CourseCollection();
$this->course->setLoadCallback('loadCourses',$this);
}
public function getName()
{
return $this->_name;
}
public function getID()
{
return $this->_id;
}
public function __toString()
{
return $this->_name;
}
public functionloadCourses(Collection $col)
{
$col->addItem(new Course(1, "001", "语文"),1);
$col->addItem(new Course(2, "002", "数学"),2);
}
}
调用代码如下:
$student=new Student(1, "majiang");
print $student->getName();
print $student->course->getItem(1) );
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
1 か月前
By DDD
R.E.P.O.最高のグラフィック設定
2週間前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
1週間前
By DDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットツール

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

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

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

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

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

ホットトピック

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

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー
