{"id":1141,"date":"2012-04-21T13:21:58","date_gmt":"2012-04-21T11:21:58","guid":{"rendered":"https:\/\/sgaul.de\/?p=1141"},"modified":"2014-03-13T21:34:49","modified_gmt":"2014-03-13T20:34:49","slug":"referenzen-bei-problemen-mit-grosen-datenmengen","status":"publish","type":"post","link":"https:\/\/sgaul.de\/2012\/04\/21\/referenzen-bei-problemen-mit-grosen-datenmengen\/","title":{"rendered":"Referenzen bei Problemen mit gro\u00dfen Datenmengen"},"content":{"rendered":"

In einem gr\u00f6\u00dferen PHP-Projekt hatte ich k\u00fcrzlich das Problem, dass gro\u00dfe Teile der Datenbanken in Arrays geschoben wurden um von dort aus weiterverarbeitet zu werden. Dies ist generell kein sch\u00f6ner Ansatz, war in der besagten Situation aber nicht mehr zu \u00e4ndern. Ein Kollege kam auf die rettende Idee, die ich hier kurz notieren m\u00f6chte, so dass ich sie nicht vergesse.<\/p>\n

Der Speicherfresser: Array zur\u00fcckgeben<\/h2>\n
function getAllTableRows() {\r\n  \/\/ ...\r\n  return $allRows;\r\n}\r\n$allRows = getAllTableRows();<\/pre>\n

Dieser Ansatz f\u00fchrte nun leider regelm\u00e4\u00dfig dazu, dass PHP mit einer Speicherfehlermeldung abbrach.<\/p>\n

Der sparsame Ansatz: Array als Referenzparameter<\/h2>\n
function getAllTableRows(&$allRows) {\r\n  \/\/ alle Werte in $allRows schreiben\r\n}\r\n$allRows = array();\r\ngetAllTableRows($allRows);<\/pre>\n

Fast schon traurig, dass das f\u00fcr PHP so einen Unterschied macht. Ich vermute, dass das an PHPs Eigenheit liegt, mehr auf Werten als auf Referenzen zu arbeiten. Ironischerweise behauptet das PHP-Manual an \u00e4hnlicher Stelle<\/a>, der Kern sei intelligent genug, dies selbst zu optimieren, zumindest was R\u00fcckgaben angeht. <\/p>\n

Mangels ausreichend gro\u00dfer Beispiel konnte ich den folgenden Ansatz nicht testen:<\/p>\n

function &getAllTableRows() {\r\n  \/\/ ...\r\n  return $allRows;\r\n}\r\n$allRows =& getAllTableRows();<\/pre>\n","protected":false},"excerpt":{"rendered":"

In einem gr\u00f6\u00dferen PHP-Projekt hatte ich k\u00fcrzlich das Problem, dass gro\u00dfe Teile der Datenbanken in Arrays geschoben wurden um von dort aus weiterverarbeitet zu werden. Dies ist generell kein sch\u00f6ner Ansatz, war in der besagten Situation aber nicht mehr zu \u00e4ndern. Ein Kollege kam auf die rettende Idee, die ich hier kurz notieren m\u00f6chte, so dass ich sie nicht vergesse.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[91],"tags":[367,245,41],"_links":{"self":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1141"}],"collection":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/comments?post=1141"}],"version-history":[{"count":6,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1141\/revisions"}],"predecessor-version":[{"id":2521,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/posts\/1141\/revisions\/2521"}],"wp:attachment":[{"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/media?parent=1141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/categories?post=1141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sgaul.de\/wp-json\/wp\/v2\/tags?post=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}