login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Static verplicht (Opgelost)

Offline Ultimatum - 30/06/2008 12:40
Avatar van UltimatumPHP expert Ey, misschien een rare vraag maar ik snap er even niets van . Ik riep net in een class een functie aan van een andere class via de static manier dus B::Test(). Maar nu zie ik net dat ik in de functie Test in classe B helemaal geen static heb neergezet maar ik kan hem wel static aanroepen.

Nu was mijn vraag, moet static nou wel altijd of niet aangezien ik dus een static functie aanroep terwijl ik dus dit heb in de class public function Test().

Iemand die er meer over weet?

10 antwoorden

Gesponsorde links
Offline timmie_loots - 30/06/2008 13:10
Avatar van timmie_loots PHP gevorderde Een non-static method static aanroepen genereert een E_STRICT error. Die zie je over het algemeen niet terug, tenzij je specifiek hebt aangegeven ook deze fouten te willen zien.

Als je in de functie vervolgens geen verwijzingen naar $this hebt staan, is er "niets" aan de hand. Toch is het beter om de functie alsnog static te declareren, sowieso om in de toekomst te voorkomen dat je er $this-afhankelijkheden in gaat bouwen waardoor een deel van je script op zijn muil gaat (namelijk het deel dat de method static aanroept).
Offline Ultimatum - 30/06/2008 13:44
Avatar van Ultimatum PHP expert Maar er staat in die functie wel degelijk een verwijzing naar $this, vandaar dat ik het zo vreemd vond .
Offline nemesiskoen - 30/06/2008 14:15
Avatar van nemesiskoen Gouden medaille

PHP expert
static functies in php worden op een fictief object uitgevoerd, vandaar dat die "$this" verwijzing wel gaat. Maar het is niet juist. Je moet uitmaken voor jezelf of het een klassefunctie is of niet. Aangezien je "$this" verwijzingen hebt denk ik van niet en is het beter de functie op een object uit te voeren. Behalve als die "$this" verwijzingen ook fout zijn en dan moet je dit veranderen in "self::".
Offline Ultimatum - 30/06/2008 15:44
Avatar van Ultimatum PHP expert Wow, niet zo snel vage, ik kan je niet helemaal volgen . Wat bedoel je precies met klassefunctie? En wat bedoel je met dat het beter is om de functie op het object uit te voeren?
Offline nemesiskoen - 30/06/2008 16:09 (laatste wijziging 30/06/2008 16:13)
Avatar van nemesiskoen Gouden medaille

PHP expert
Klassefunctie is een static functie. Deze behoort aan de klasse en niet aan een instantie ervan. Bv in de klasse Vak zal de functie getAlleVakken een klassefunctie zijn, waarbij het resultaat ook intern in een collection (die opzichzelf een klassevariabele is) wordt opgeslagen.

Een functie uitvoeren op een object:
  1. <?php
  2. $instance = new ...();
  3. $instance->funcCall(); // uitgevoerd op object $instance
Offline Ultimatum - 30/06/2008 16:36
Avatar van Ultimatum PHP expert Ow zo, nu snap ik hem. Maar nu snap ik nog steeds niet hoe ik een niet static functie in een andere class als klassefunctie kan aanroepen..
Offline nemesiskoen - 30/06/2008 21:33
Avatar van nemesiskoen Gouden medaille

PHP expert
  1. $obj = KlasseNaam();
  2. $obj->nietKlasseFunctie();


maar als dit een probleem vormt moet het inderdaad via een klassefunctie gaan, maar dan moet alles binnen die klasse niet via "$this" te gaan maar via self en moeten die andere functies ook static gedeclareerd worden. Laat anders eens zien over wat het gaat.
Offline Ultimatum - 30/06/2008 23:52
Avatar van Ultimatum PHP expert Het is deze functie
  1. <?php
  2. public function getLevel() {
  3.  
  4. $sSelect = Database::query("SELECT usergroup_id
  5. FROM users
  6. INNER JOIN users_session
  7. ON (users.user_id = users_session.user_id)
  8. WHERE users.user_id = ". Validate::in($_SESSION['userid']) ."
  9. AND hash = '". Validate::in($_SESSION['hash']) ."'");
  10. if(Database::numRows($sSelect) == 1) {
  11.  
  12. $aFetch = Database::fetch($sSelect);
  13.  
  14. return $aFetch['usergroup_id'];
  15.  
  16. } else {
  17.  
  18. return 0;
  19.  
  20. }
  21. }
  22. ?>


En als ik deze dus in een andere class zo aanroep:
  1. <?php
  2. echo Auth::getLevel();
  3. ?>


Dan krijg ik gewoon een resultaat terug ipv een error.
Offline nemesiskoen - 01/07/2008 12:16
Avatar van nemesiskoen Gouden medaille

PHP expert
je zei dat je in die functie een verwijzing naar $this had. Ik zie deze niet direct staan, misschien zie ik ze over het hoofd of is ze er inderdaad niet.

Verder over je ontwerp: ik zou een instantie van de huidige ingelogde user ergens in opslaan, zodat je hierop de functie $currentUser->getLevel() kunt uitvoeren, ipv op Auth. Auth zou eigenlijk 1 maal per pageload (of minder) moeten aangeroepen worden om te zien wie de huidige user is. Verder alles op het object $currentUser/$user/$whatever laten uitvoeren. Want je vraagt niet het level van de klasse Auth op, of van een instantie ervan, maar van een instantie van de klasse User of iets dergelijks.
Offline Ultimatum - 01/07/2008 21:57
Avatar van Ultimatum PHP expert Daar heb je wel gelijk in, snap niet waarom er nou geen $this in staat . Misschien was andere functie, kan in ieder geval niet meer vinden. Bedankt voor je commentaar .
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.262s