<?php 
// J:\awww\www\fwphp\glomodul\z_examples\php_patterns\singleton_B12phpfw.php 
//SINGLETON PATTERN with a class that establishes a database connection,  
//and restricts the number of instances to only one. 
//https://phpenthusiast.com/blog/the-singleton-design-pattern-in-php 
namespace B12phpfw\module\php_patterns ; 
 
use B12phpfw\core\zinc\Autoload ; 
use B12phpfw\core\zinc\Config_allsites ; 
//use B12phpfw\core\zinc\Db_allsites; 
//use B12phpfw\core\zinc\Dbconn_allsites; 
 
//1. settings - properties - assign global variables to use them in any code part 
$module_towsroot = '../../../../' ;  //to web server doc root or our doc root by ISP 
//$dirup_to_app = str_replace('\\','/', dirname(__DIR__) ) ; //to app eg glomodul 
 
$pp1 = (object) //=properties global array (like Oracle Forms property palette) 
[   'dbg'=>'1', 'stack_trace'=>[[str_replace('\\','/', __FILE__ ).', lin='.__LINE__]] 
  //1.1 
  , 'module_towsroot'=>$module_towsroot 
  //1.2 
  , 'module_version'=>'6.0.4.0 php_patterns', 'vendor_namesp_prefix'=>'B12phpfw' 
  //1.3 F o r  A u t o l o a d 
  , 'module_path_arr'=>[ //MUST BE NUM INDEXED for auto loader loop (not 'string'=>...) 
        str_replace('\\','/', __DIR__ ).'/' //thismodule_cls_dir_path 
      //dir of global clses for all sites : 
      , str_replace('\\','/', realpath($module_towsroot.'zinc')) .'/' 
  ] 
] ; 
 
//2. global cls loads classes scripts automatically 
require($pp1->module_towsroot.'zinc/Autoload.php'); //or Composer's autoload cls-es 
$autoloader = new Autoload($pp1);  
                if ('1') {Config_allsites::jsmsg( [ basename(__FILE__) //. __METHOD__  
                   .', line '. __LINE__ .' SAYS'=>' ' 
                   ,'where am I'=>'AFTER  A u t o l o a d' 
                ] ) ; } 
 
 
 
 
// **************************************************************************** 
echo '<h1>Better : URL contains Home_ ctr method read_post (?i/read_post/)</h1>' ; 
// **************************************************************************** 
echo 
'URL MUST BE : http://dev1:8083/fwphp/glomodul/z_examples/php_patterns/singleton_B12phpfw.php?i/read_post/'; 
  //ee ...'read_post'       => QS.'i/read_post/' , 
echo '<p>Page call is only $db = new Home_ctr($pp1) ; (or new App, or simmilar).</p>'; 
$db = new Home_ctr($pp1) ; //Home_ ctr (or App) class "inherits" index.php ee "inherits" $ p p 1 
 
 
 
 
// **************************************************************************** 
echo '<h1>'. 'Worse : not used Home_ ctr method read_post' .'</h1>' ; 
// **************************************************************************** 
echo 
'URL is without ?i/read_post/ : http://dev1:8083/fwphp/glomodul/z_examples/php_patterns/singleton_B12phpfw.php'; 
echo '<p>Page call must contain code in method read_post.</p>'; 
//3. process request from ibrowser & send response to ibrowser : 
//1=autol STEP_2=conf 3=view/rout/disp 4=preCRUD 5=onCRUD 
//STEP_3=rout/disp is in parent::__construct : fw core calls method in Home_ctr cls 
 
echo '<h3>'.basename(__FILE__) //. __METHOD__  
   . ', line '. __LINE__ .' SAYS: Before $db = new Home_ctr($pp1) ; '.'</h3>' ; 
echo '$db = new Home_ctr($pp1) ; //Home_ ctr "inherits" index.php ee inherits $p p1'; 
              // $cursor is: object(PDOStatement)#9 (1) { 
              //  ["queryString"]=> 
              //  string(37) "SELECT COUNT(*) COUNT_ROWS FROM posts" 
              //}  
 
//The result is the same connection for both instances. 
//ee is_null(self::$instance) is printed ONLY ONCE DURING PAGE LIFE - SINGLETON !!! : 
    //B12phpfw\core\zinc\Dbconn_allsites::get_or_new_dball ln=32 SAYS: 
    //is_null(self::$instance) 
 
$db = new Home_ctr($pp1) ; //Home_ ctr "inherits" index.php ee inherits $p p1 
$cursor = $db->rr("SELECT COUNT(*) COUNT_ROWS FROM posts", [], __FILE__ .', ln '. __LINE__ ) ; 
 
$db = new Home_ctr($pp1) ; //Home_ ctr "inherits" index.php ee inherits $p p1 
//SELECT * FROM admins ORDER BY username 
$cursor = $db->rr("SELECT COUNT(*) COUNT_ROWS FROM posts", [], __FILE__ .', ln '. __LINE__ ) ; 
          //$db::disconnect(); //NOT problem ON LINUX 
          //return $cursor ; 
while ($row = $db->rrnext($cursor)): {$r = $row ;} endwhile; //c_, R_, U_, D_ 
 
 
 
echo '<pre>$cursor = $db->rr("SELECT COUNT(*) COUNT_ROWS FROM posts"...) is: '; var_dump($cursor); echo '</pre>'; 
echo '$db->rrnext($cursor))='; print_r($r); 
 
 
exit(0); 
 
 
 |