Hallo,
ik ben bezig met een mvc site, en maak hierin gebruik van static methodes en properties.
In de control heb ik deze code staan:

public static function getPost($request) {
 foreach ($_POST as $key => $value) {
  self::$postLogin[$key] =$value;
 }
 unset($_POST);
 $_POST = array();
 return self::$postLogin;
}

om de post input te hernoemen naar static properties en
		
public static function getMailTemplate($aanhef, $achternaam, $bericht) {
 ob_start();
 include ('view/mailTemplate.html');
 self::$mailTemplate = ob_get_contents();
 ob_end_clean();
 return self::$mailTemplate;
}

nu lukt het zonder problemen om overal vandaan de static methode ControlClass::getMailTemplate(),
maar ik krijg foutmeldingen wanneer ik in een andere class bijvoorbeeld de static propertie ControlClass::getPost()[naam] wil aanroepen.
Kan iemand me uitleggen hoe dit zit?
Grote dank valt u alvast ten dele.
>> maar ik krijg foutmeldingen

Wat zeggen die foutmeldingen?
in mijn editor (dreamweaver) krijg ik er is een syntaxis fout, en als ik de applicatie start, dan stopt hij gewoon. Toegegeven, ik ben zeer zwak in error afhandeling.
Met deze syntaxis hebben oudere versies van PHP inderdaad moeite:

<?php
$naam = ControlClass::getPost()['naam'];
?>

Het gaat waarschijnlijk wel goed als je het in tweeën knipt:

<?php
$post = ControlClass::getPost();
$naam = $post['naam'];
?>
Werkelijk fantastisch, daar heb ik al een tijdje het net voor afgestruind en de oplossing ziet er eigenlijk veel simpeler uit, dan hoe ik erover aan het denken was...
Grote dank!!!
Wat ben je eigenlijk aan het doen, dat je in globale classvariabelen aan het schrijven bent maar er schijnbaar niets mee doet? Vreemd gebruik van self::$postLogin en self::$mailTemplate.
Hm, als function array dereferencing (FAD) niet werkt, dan is je PHP versie redelijk oud? In ieder geval < 5.4? Constructies van de vorm something()[2] worden pas vanaf 5.4 ondersteund.
ik heb thuis versie 5.6.0
en op mijn hosting provider (versio) 5.5.30
Ben van Velzen op 23/05/2016 20:48:10

Wat ben je eigenlijk aan het doen, dat je in globale classvariabelen aan het schrijven bent maar er schijnbaar niets mee doet? Vreemd gebruik van self::$postLogin en self::$mailTemplate.

Ach, zo vreemd is het nu ook weer niet, want zelfs Facebook gebruikt dergelijke utilities:

https://github.com/facebook/fbctf/blob/master/src/Utils.php#L87

De methode getPost() in de openingspost doet nu inderdaad nog niets, maar dat kun je later wel refactoren.
Ben, wat bedoel je precies met dat ik er schijnbaar niks mee doe?
In de Model roep ik dit veelvuldig aan, of is een andere manier misschien beter?
Sowieso lees ik op meerdere plekken dat het goed is/zou zijn om globale variabelen zoals $POST te hernoemen naar variabelen. Echter kon ik die dan niet aanroepen vanuit de model of als parameter doorgeven aan de model.
Dus hoe zou jij dat dan doen?
Ben bedoelt dat je niets meer doet dan variabelen kopiëren.
En kijk eens goed: je stopt een $request in de methode, maar daar doe je ook niets mee:


<?php
public static function getPost($request)
{
    foreach ($_POST as $key => $value) {
        self::$postLogin[$key] =$value;
    }
    unset($_POST);
    $_POST = array();
    return self::$postLogin;
}
?>


Verder vernietig je $_POST, waardoor die data elders niet meer te gebruiken is. Dat is in de praktijk vooral vervelend als je later ergens eens code van anderen wilt toevoegen. Je legt daarmee in een vroeg stadium een afhankelijkheid vast die later in de weg kan gaan zitten.

Reageren