Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Taulukko on aina tyhjä

Multibyte [09.08.2017 12:26:10]

#

Moi

Nyt olen taas aivan kuutamolla enkä pääse jyvälle, että mikä ao. supersimppelissä skriptissä on pielessä.

Ennen silmukkaa alustamani taulukko on aina tyhjä silmukassa.

$tids = [];
      foreach ($price->field_license_types as $license_type) {

        $formfield = &$form['line_item_fields']['field_permit_type']['und']['#options'];
        $tid = $license_type->field_license_type_term->tid->value();

        if (!empty($formfield[$tid]) && !in_array($tid, $tids)){
          $tids[$tid] = $tid; // Miksi tämä asetettu avain-arvopari ei näy seuraavien silmukoiden aikana?
          $label = $formfield[$tid];
          $price = (float) $license_type->field_license_commerce_price->amount->value() / 100;
          $formfield[$tid] = implode(" ", array($label, $price , '€'));

        }
      }

Silmukan jälkeen voin käyttää taulukkoa ja se täyttynyt oikeilla arvoilla. Miksei siis silmukassa näy arvoa esim. 1 arvon asettamisen jälkeen?

Multibyte [10.08.2017 10:13:00]

#

No just - olihan taas ongelma. Jos CMS:ään asennetut teema ja lisäosa ovat samannimiset, niin koodi voidaan suorittaa kahteen kertaan - facepalm.

Käytännössä siis joku CMS sisäinen funktio kutsuu ensin lisäosan kohdalla x-nimellä alustettuja funktiota, jonka jälkeen CMS tekee saman myös teeman kohdalla.
Ja kun ne ovat samannimiset, niin funktio voidaan suorittaa kahteen kertaan, koska se ei tunnista, että onko kyseessä teema vai lisäosa, kunhan funktio löytyy.
Eikä se myöskään rekisteröi, että funktio olisi jo suoritettu.

Tokikaan teemassa ja lisäosassa ei voi olla määritettynä samoja funktiota, koska silloin tulkki antaisi herjan duplikaatista ja suoritus lakkaisi.

Metabolix [11.08.2017 18:11:58]

#

Voit itse estää funktion suorittamisen kahteen kertaan esimerkiksi staattisella muuttujalla:

function f() {
	static $suoritettu = false;
	if ($suoritettu) {
		return;
	}
	$suoritettu = true;

	// Koodi tähän.
}

Tietysti vielä fiksumpaa olisi järjestää asiat niin, että funktiota ei edes kutsuta kahdesti...

qeijo [13.08.2017 16:16:25]

#

Metabolix kirjoitti:

(11.08.2017 18:11:58): Voit itse estää funktion suorit­ta­misen...

function f() {
	static $suoritettu = false;
	if ($suoritettu) {
		return;
	}

    // Koodi tähän.
	$suoritettu = true;
}

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta