ホームページ > バックエンド開発 > PHPチュートリアル > 派生クラス データベースの単純な関心モード

派生クラス データベースの単純な関心モード

WBOY
リリース: 2016-07-25 08:47:30
オリジナル
1027 人が閲覧しました
派生クラス データベースの単純な関心モード
  1. //解決すべき問題は、1 つのメソッドでクラスを複数回呼び出すことです
  2. //同じ親クラスへの複数回の呼び出し
  3. class Pdoo {
  4. public function __construct(){}
  5. //これはデータベースクラスです
  6. function select($name) {
  7. echo "authentic" . $name;
  8. }
  9. }
  10. class Conn {
  11. static $db;
  12. private function __construct() {
  13. }
  14. private function __clone( ) {
  15. }
  16. //Base クラスの代わりにデータベース接続を返します
  17. public static function getInstance() {
  18. if (self::$db == null) {
  19. self::$db = new Pdoo ( );
  20. }
  21. return self::$db;
  22. }
  23. //このメソッドは無効です
  24. function select($name) {
  25. echo $name;
  26. }
  27. }
  28. class Db {
  29. static $db; static $instanceInternalCache;
  30. private function __construct() {
  31. //初期化はデータベースへの接続とは関係ありません
  32. }
  33. private function __clone() {
  34. }
  35. //ここではインスタンス化できません
  36. public static function getDb( ) {
  37. }
  38. //ここでの解決策は、A が同じメソッド内で複数回呼び出された場合、複数回インスタンス化されないということです
  39. // 複数の派生クラスがインスタンス化される、つまり、多数の派生クラスがインスタンス化されることは解決できません派生クラスのデータベースは何度でも接続されます
  40. public static function getInstance($model) {
  41. if (self::$instanceInternalCache [$model] == NULL) {
  42. self::$instanceInternalCache [$model] = new $model ( );
  43. }
  44. return self ::$instanceInternalCache [$model];
  45. }
  46. function select($name) {
  47. Conn::getInstance ()->select ( $name );
  48. }
  49. }
  50. class A extends Db {
  51. function s($name) {
  52. $this->select($name);
  53. }
  54. public static function instance() {
  55. returnparent::getInstance ( __CLASS__ );
  56. }
  57. }
  58. class B extends Db {
  59. function s($name) {
  60. $this->select($name);
  61. }
  62. public static function instance() {
  63. returnparent::getInstance ( __CLASS__ );
  64. }
  65. }
  66. class Main {
  67. public function t() {
  68. A::instance ()->select ( "1" );
  69. A::instance ()->select ( "11" );
  70. B::instance ()- >select ( "2" );
  71. }
  72. }
  73. $t = new Main ();
  74. $t->t ();
コードをコピー

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