Zerstöre Objekt in php
Ich bin der Ausführung ein Programm in PHP und bekomme die folgende Fehlermeldung manchmal.Ist dies durch die Schaffung einer Menge von Objekten und nicht Sie zu zerstören oder aus einem anderen Grund?
Allowed memory size of 16777216 bytes exhausted (tried to allocate 19456 bytes)
Was ist die richtige Methode, Sie zu zerstören, ein Objekt in 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);
}
}
Bitte zeigen Sie einige code
App::import('Vendor','GoogleShipping' ,array('file'=>', googlecheckout'.DS.'Bibliothek'.DS.'googleshipping.php')); App::import('Vendor','GoogleTax' ,array('file'=>', googlecheckout'.DS.'Bibliothek'.DS.'googletax.php')); class Warenkorb{ var $_itemname; var $_unit_price;
Ich eine mit cakephp
öffentliche Funktion einen Anwendungsfall($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);}
Sie können Bearbeiten Sie Ihre post, mit dem editieren-button (stackoverflow.com/posts/4215324/edit), Dann fügen Sie Ihren code in code-Blöcke, um Ihre Post
App::import('Vendor','GoogleShipping' ,array('file'=>', googlecheckout'.DS.'Bibliothek'.DS.'googleshipping.php')); App::import('Vendor','GoogleTax' ,array('file'=>', googlecheckout'.DS.'Bibliothek'.DS.'googletax.php')); class Warenkorb{ var $_itemname; var $_unit_price;
Ich eine mit cakephp
öffentliche Funktion einen Anwendungsfall($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);}
Sie können Bearbeiten Sie Ihre post, mit dem editieren-button (stackoverflow.com/posts/4215324/edit), Dann fügen Sie Ihren code in code-Blöcke, um Ihre Post
InformationsquelleAutor Sitansu | 2010-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ohne zu sehen, den code, können wir nicht genau sagen, was diesen Fehler verursacht. Es könnte sein, wodurch zu viele Objekte, aber es könnte genauso gut erstellen zu groß ein array oder andere Daten.
Entweder Weise, unabhängig davon, welche Art von Daten Sie erstellen, die wirft den Fehler, ist es wahrscheinlich eine Schleife oder rekursiven Funktion aus dem Ruder laufen, ist die zugrunde liegende Ursache, die Schaffung neuer Daten bei jeder iteration, anstatt Sie bewusst genug Objekte zum überlaufen, viel Speicher.
Wenn Sie wirklich brauchen, um genug Daten zu füllen, viel Speicher, dann Sie können ändern Sie die maximale Speicher-Zulage in PHP.ini, aber es ist unwahrscheinlich.
InformationsquelleAutor Spudley
Als ich war mit einer Menge von APP::import in vielen Orten zu importieren vendor-Dateien in cakephp es verbraucht mehr Speicher.
Statt mit APP::import habe ich verwendet, require_once() und der Fehler nicht Auftritt.
InformationsquelleAutor
Verwenden unset zu zerstören, den Verweis auf das Objekt. Wenn alle Referenzen Weg sind, wird das Objekt zerstört.
Können Sie auch Gebrauch machen von der memory_get_usage - Funktion, um zu sehen, wie viel Speicher Sie verwenden im moment. Versuchen Sie es, um herauszufinden, wo Ihre Speicher-Engpässe sind.
InformationsquelleAutor Emil Vikström
Gut, wenn Sie dies getan zum Beispiel:
Ihr nicht nur bei der Erstellung eines Objekts 10K mal Ihr auch mit
unset
10K-Zeiten, die zu einer Verringerung der Geschwindigkeit der AnwendungIhre beste verstörende Sie über den Betrag X, wenn Iterationen etwa so:
Nun Ihr Gedächtnis nicht erreichen sollten-peak, und Ihr nur mit unset 20 mal 🙂
Diese Weise speichern Sie Ihre Auftritte.
$count
Kleinere Aufsicht aber der Punkt war es.
es sind $count++ lol
InformationsquelleAutor RobertPitt