détruire un objet en php
Je suis de l'exécution d'un programme en PHP et d'obtenir l'erreur ci-dessous, parfois.Est-ce dû à la création de beaucoup d'objets et de ne pas les détruire ou pour toute autre raison?
Allowed memory size of 16777216 bytes exhausted (tried to allocate 19456 octets)
Quelle est la bonne méthode pour détruire un objet en PHP5.
Code:
App::import('Vendor','GoogleShipping',array('file'=>'googlecheckout'.DS.'library'.DS.'googleshipping.php'));
App::import('Vendor','GoogleTax',array('file'=>'googlecheckout'.DS.'library'.DS.'googletax.php'));
class Cart{
var $_itemname;
var $_unit_price;
public function Usecase($itemname,$unit_price,$url,$merchant_private_item_data)
{
$cart = new GoogleCart($this->_merchant_id, $this->_merchant_key, $this->_server_type,$this->_currency);
$item_1 = new GoogleItem($this->_itemname,$this->_item_description,$this->_total_count,$this->_unit_price,$this->_merchant_private_item_data);
}
}
- Merci de montrer un peu de code
- App::import('Vendor','GoogleShipping' ,array('fichier'=>'googlecheckout'.DS. "bibliothèque".DS.'googleshipping.php')); App::import('Vendor','GoogleTax' ,array('fichier'=>'googlecheckout'.DS. "bibliothèque".DS.'googletax.php')); class Panier{ var $_itemname; var $_unit_price;
- J'ai une aide de cakephp
- public function cas d'utilisation($nom de l'élément,$unit_price,$url,$merchant_private_item_data) { $panier = new GoogleCart($this->_merchant_id, $this->_merchant_key, $this->_server_type,$this->_currency); $item_1 = new GoogleItem($this->_itemname,$this->_item_description,$this->_total_count,$this->_unit_price,$this->_merchant_private_item_data);}
- chaque classe je suis importation crée aussi des objets
- Vous pouvez modifier votre post, avec le bouton modifier (stackoverflow.com/posts/4215324/edit) Alors s'il vous plaît ajouter votre code à l'intérieur de blocs de code à votre Post
Vous devez vous connecter pour publier un commentaire.
Sans voir le code, nous ne pouvons pas dire exactement quelle est la cause de cette erreur. Il pourrait être de créer un trop grand nombre d'objets, mais il pourrait tout aussi facilement être de créer un trop grand d'un tableau ou d'autres données.
De toute façon quel que soit le type de données que vous êtes en train de créer qui est en train de jeter l'erreur, c'est probablement une boucle ou d'une fonction récursive hors de contrôle c'est la cause sous-jacente, la création de nouvelles données à chaque itération, plutôt que vous avez délibérément de créer suffisamment d'objets pour les débordements de mémoire.
Si vraiment vous avez besoin de créer suffisamment de données pour remplir beaucoup de mémoire, puis vous pouvez modifier la quantité de mémoire maximale de l'allocation en PHP.ini, mais c'est peu probable.
Que j'ai été en utilisant beaucoup de APP::import dans de nombreux endroits pour importer des fichiers vendor dans cakephp, il consomme plus de mémoire.
Au lieu d'en utilisant APP::import, j'ai utilisé require_once() et l'erreur ne se produit.
Utilisation unset de détruire la référence de votre objet. Lorsque toutes les références sont partis, l'objet sera détruit.
Vous pouvez également faire usage de la la fonction memory_get_usage fonction pour voir des ux de quantité de mémoire que vous utilisez en ce moment. Essayez de l'utiliser pour savoir où votre mémoire des goulets d'étranglement.
Eh bien, si vous avez fait ceci par exemple:
votre non seulement la création d'un objet 10K fois votre aussi à l'aide de
unset
10K fois ce qui permettrait de diminuer la vitesse de votre applicationde votre mieux de troublant eux plus de X si itérations de la sorte:
Maintenant, votre mémoire ne doit pas atteindre la crête, et votre seule à l'aide de la fonction unset (20 fois 🙂
De cette façon, votre économie de spectacles ainsi.
$count