Maison  >  Article  >  développement back-end  >  Analyse d'échantillon d'accès au tableau PHP-ArrayAccess

Analyse d'échantillon d'accès au tableau PHP-ArrayAccess

little bottle
little bottleavant
2019-04-24 14:25:132878parcourir

Cet article parle principalement de l'accès aux tableaux en PHP, qui a une certaine valeur de référence. Les amis intéressés peuvent en apprendre davantage et espérer qu'il pourra vous aider.

Je n'étais pas très familier avec ArrayAccess auparavant. Je vais maintenant trier les connaissances liées à ArrayAccess. L'interface ArrayAccess est une interface qui offre la possibilité d'accéder à des objets comme l'accès à des tableaux.

Le contenu de l'interface est le suivant :

ArrayAccess {
    //检查一个偏移位置是否存在 
    abstract public boolean offsetExists ( mixed $offset ); 
    //获取一个偏移位置的值 
    abstract public mixed offsetGet ( mixed $offset ); 
    //设置一个偏移位置的值 
    abstract public void offsetSet ( mixed $offset , mixed $value ); 
    //复位一个偏移位置的值 
    abstract public void offsetUnset ( mixed $offset ); 
}

Utilisé dans le projet pour obtenir la configuration du site web :

<?php
namespace lib;
use mpf\core\Di;
class config implements \ArrayAccess{

//定义存储数据的数组
   protected $configs;
   public function __construct($configs){
         $this->configs = $configs;
         $configs = \lib\model\Home::getWebConfig();
         foreach( $configs as $config ){
               if( !isset($this->configs[$config[&#39;sc_key&#39;]]) ){
                   $this->configs[$config[&#39;sc_key&#39;]] = $config[&#39;sc_content&#39;];
               }
         }
   }
   public function get($key){
         if( isset($this->configs[$key]) ){
               return $this->configs[$key];
         }elseif( $key == &#39;caipiao&#39;){
               $this->configs[&#39;caipiao&#39;] = \lib\model\Home::getLcs();  
               return $this->configs[$key];
         }elseif( $key == &#39;user_money&#39; ){
               if( isset($_SESSION[&#39;uid&#39;]) ){
                 if( $_SESSION[&#39;utype&#39;] == 5 ){
                       $sql = &#39;select money from inner_user where uid=?&#39;;
                 }else{
                       $sql = &#39;select money from user where uid=?&#39;;
                 }
                   $this->configs[&#39;user_money&#39;] = \mpf\core\Di::$Di->db->prepare_query($sql,[getUid()])->fetch(\PDO::FETCH_COLUMN);
                   return $this->configs[&#39;user_money&#39;];
             }
       }
   }
   public function offsetExists($index){
         return isset($this->configs[$index]);
   }
   public function offsetGet($index){
         return $this->configs[$index];
   }
   public function offsetSet($index,$val){
         $this->configs[$index] = $val;
   }
   public function offsetUnset($index){
         unset($this->configs[$index]);
   }
}

Cela fonctionne. Utilisez l'objet config pour accéder directement au contenu des informations de configuration.

Programme de configuration :

Nous pouvons utiliser des fichiers de configuration pour contrôler le programme via ArrayAccess.

1. Créez un répertoire de configuration dans le répertoire du projet
2 Créez les fichiers de configuration correspondants dans le répertoire de configuration, tels que app.php et database.php. Le programme de fichiers est le suivant

app.php

<?phpreturn [   
 &#39;name&#39; => &#39;app name&#39;,   
  &#39;version&#39; => &#39;v1.0.0&#39;
];

database.php

<?php

return [
    &#39;mysql&#39; => [
        &#39;host&#39; => &#39;localhost&#39;,
        &#39;user&#39; => &#39;root&#39;,
        &#39;password&#39; => &#39;12345678&#39;
    ]
];

3. 🎜>

<?php

namespace Config;

class Config implements \ArrayAccess
{
    private $config = [];

    private static $instance;

    private $path;

    private function __construct()
    {
        $this->path = __DIR__."/config/";
    }

    public static function instance()
    {
        if (!(self::$instance instanceof Config)) {
            self::$instance = new Config();
        }
        return self::$instance;
    }
    
    public function offsetExists($offset)
    {
        return isset($this->config[$offset]);
    }
    
    public function offsetGet($offset)
    {
        if (empty($this->config[$offset])) {
            $this->config[$offset] = require $this->path.$offset.".php";
        }
        return $this->config[$offset];
    }

    public function offsetSet($offset, $value)
    {
        throw new \Exception(&#39;不提供设置配置&#39;);
    }

    public function offsetUnset($offset)
    {
        throw new \Exception(&#39;不提供删除配置&#39;);
    }
}

$config = Config::instance();

//获取app.php 文件的 name
echo $config[&#39;app&#39;][&#39;name&#39;].PHP_EOL; //app name

//获取database.php文件mysql的user配置
echo $config[&#39;database&#39;][&#39;mysql&#39;][&#39;user&#39;].PHP_EOL; // root
Tutoriels associés :

Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer