L'injection de dépendance dans Slim est basée sur le bouton, alors je suis allée réapprendre le bouton. Par rapport à la classe d'injection de dépendances que j'ai écrite auparavant, Pimple a un usage très nouveau au lieu d'utiliser
$container->session_storage = function ($c) { return new $c['session_storage_class']($c['cookie_name']); };
, il est injecté dans un tableau :
$container['session_storage'] = function ($c) { return new $c['session_storage_class']($c['cookie_name']); };
Je l'ai seulement découvert. quand j'ai regardé le code source, il s'avère que l'astuce réside dans l'interface ArrayAccess fournie par php5.
Définition officielle : une interface qui offre la possibilité d'accéder à des objets comme l'accès à des tableaux.
Cette interface définit principalement quatre méthodes abstraites :
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 ) #删除数据
Si vous souhaitez que l'objet soit utilisé comme un tableau PHP, alors nous devons implémenter ArrayAccess Interface
Le code est le suivant :
interface ArrayAccess boolean offsetExists($index) mixed offsetGet($index) void offsetSet($index, $newvalue) void offsetUnset($index)
L'exemple suivant montre comment utiliser cette interface. L'exemple n'est pas complet, mais il. suffit pour comprendre : ->
Le code est le suivant :
<?php class UserToSocialSecurity implements ArrayAccess { private $db;//一个包含着数据库访问方法的对象 function offsetExists($name) { return $this->db->userExists($name); } function offsetGet($name) { return $this->db->getUserId($name); } function offsetSet($name, $id) { $this->db->setUserId($name, $id); } function offsetUnset($name) { $this->db->removeUser($name); } } $userMap = new UserToSocialSecurity(); print "John's ID number is " . $userMap['John']; ?>
En fait, lorsque la recherche $userMap['John'] est exécutée , PHP appelle la méthode offsetGet() , puis appelle la méthode getUserId() liée à la base de données à partir de cette méthode.
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!