[php] functions/classes hoe zit dit?

Pagina: 1
Acties:
  • 418 views

Acties:
  • 0 Henk 'm!

  • josvane
  • Registratie: Oktober 2002
  • Laatst online: 09-09 13:03
Op dit moment ben ik bezig met het schrijven van een PHP app. Nu gaat dit best aardig, ik probeer dus alles met classesn en functions te doen.

Nu heb ik een login welke na het invullen een controle doet. Is er een fout gaat hij terug een laat hij zien wat er fout is.

Dit zijn twee functions 1 binnen dezelfde klasse, namelijk het weergeven van het formulier. De andere is buiten de klasse en is het genereren van de melding in de gewenste taal.

In mij PHP code doe ik dit nu zo.

PHP:
1
$this->view_login_panel($user->lang(INCORRECT_USERNAME));


Dit werkt ook gewoon.
Nu zat ik in de broncode van PHPBB te kijken en volgens dat systeem zou het met mijn code als voorbeeld er zo uit zien
PHP:
1
$this->view_login_panel($user->lang['INCORRECT_USERNAME']);


Nu zit phpbb best uitgebreid in elkaar, het lukt mij dus niet te herleiden hoe dit nu werkt.
Het aparte is dat deze manier geen foutmelding geeft, maar ook geen output. Mijn vermoeden is dan ook dat het zit in klasse user en function lang. Daar moet ik het misschien anders afvangen.

Als test heb ik een simpele print functie in de functie gezet. De funtie lang start dus helemaal niet op.

Iemand een idee hoe dit werkt, of het heet zodat ik het kan googlen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik heb geen idee waar je het nu over hebt. :?

Je hebt zelf een stuk code geschreven, maar phpBB heeft een andere manier om het te doen en nu vraag je wat het verschil is?

In jouw code roep je de method view_login_panel aan met als parameter het resultaat van de method lang in in je $user-object, die je weer met de waarde die opgeslagen zit in de constante INCORRECT_USERNAME aanroept.
Het tweede stuk code doet iets heel anders: die roept de method view_login_panel van het huidige object aan met als parameter de waarde van de array $lang in je $user-object op index 'INCORRECT_USERNAME'.

Dit zijn twee compleet verschillende dingen en ik begrijp niet wat jij nu wilt dat we je gaan vertellen? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Dat kunnen wij zo niet zien wat het moet zijn. In het eerste voorbeeld is het een functie die je aanroept, en daarbij de constante "INCORRECT_USERNAME" meegeeft. Bij het andere voorbeeld vraagje de value op van de array met de key "INCORRECT_USERNAME".

Dus als het eerste werkt, werkt het tweede niet en zou je waarschijnlijk een error moeten krijgen, maar dat durf ik niet met zekerheid te zeggen, het blijft php... :P

edit: Wat NMe zegt dus... 8)7 /me moet sneller leren typen... :')

[ Voor 9% gewijzigd door Verwijderd op 18-10-2009 00:32 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 18 oktober 2009 @ 00:31:
Dus als het eerste werkt, werkt het tweede niet en zou je waarschijnlijk een error moeten krijgen, maar dat durf ik niet met zekerheid te zeggen, het blijft php... :P
Ik verwacht dat er een notice of een warning is maar dat die niet te zien is, waarschijnlijk door een te lage instelling van error_reporting danwel display_errors.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • josvane
  • Registratie: Oktober 2002
  • Laatst online: 09-09 13:03
Bedankt tot op heden, ik heb het nog niet werkend, maar ik weet wel waar ik op moet zoeken e.d.

De error_reporting geeft nu dus wel een foutmelding, hier kan ik dus op verder zoeken

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Enige kans dat je die foutmelding hier kan posten zodat wij misschien een idee krijgen van wat je vraag nu eigenlijk is? 8)7

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 10:25
Wat probeer je nou te bereiken? Eerst zeg je:
josvane schreef op zondag 18 oktober 2009 @ 00:22:In mij PHP code doe ik dit nu zo.

PHP:
1
$this->view_login_panel($user->lang(INCORRECT_USERNAME));


Dit werkt ook gewoon.
En dan:
josvane schreef op zondag 18 oktober 2009 @ 01:12:
Bedankt tot op heden, ik heb het nog niet werkend, maar ik weet wel waar ik op moet zoeken e.d.
Je hebt het werkend, maar je vindt de methode van PHPBB mooier o.i.d. en je wilt het dus net zo doen als zij?
Zoals al gezegd is het niet alleen een andere notatie, het is een andere manier van werken: direct de waarde opzoeken in een array a.d.h.v. een index i.p.v. dit opzoeken overlaten aan een functie zoals jij eerst deed (waarbij die functie misschien ook weer een array gebruikt, maar daar heb je dan alleen binnen die functie mee te maken).

Als je wilt overstappen op eenzelfde methode als PHPBB moet dat niet al te moeilijk zijn (de hoeveelheid werk hangt af van wat die lang-methode nu precies doet). Het lijkt alsof je arrays (toch wel basisgereedschap) niet goed begrijpt, terwijl je wel uitgebreid met classes bezig bent.

Acties:
  • 0 Henk 'm!

  • josvane
  • Registratie: Oktober 2002
  • Laatst online: 09-09 13:03
Als ik onderstaande zo test, krijg ik de volgende foutmelding
code:
1
Notice: Undefined property: klas::$functie in /home/eijsden/domains/inter-visie.com/public_html/test/iv_ict/lang.php on line 14

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
error_reporting(E_ALL); // Error reporting enabled
class klas
{
    function functie()
    {
    $data = array( // De array, komt later in een apart bestand.
    "a"   => "Record a", 
    "b"   => "Record b", 
    );
    echo 'This function is used';
    }
}
$test = new klas;
$test->functie['a'];
?> 


Dat de fout onstaat is omdat ik die functie nu feitelijk verkeerd aanroep. Het lukt mij nog steeds niet om boven water te krijgen hoe dit dan werkt.
Als ik er van maak
PHP:
1
$this->functie('a');
Dan krijg ik wel netjes de melding terug van this function is used.
edit:
@rayman
Als je wilt overstappen op eenzelfde methode als PHPBB moet dat niet al te moeilijk zijn (de hoeveelheid werk hangt af van wat die lang-methode nu precies doet). Het lijkt alsof je arrays (toch wel basisgereedschap) niet goed begrijpt, terwijl je wel uitgebreid met classes bezig bent.
Het is niet dat het niet werkt, ik wil graag snappen hoe de techniek van phpbb werkt en of het toepasbaar is voor mij, ik snap dat je hier op tweakers niet aan het handje meegenomen wordt. Maar in veel gevallen vindt ik wel dat een hoop mensen je toch gewoon weer het bos in sturen

[ Voor 27% gewijzigd door josvane op 18-10-2009 12:06 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik zou, los van classes, eerst eens opzoeken hoe functies werken (en wellicht ook wat arrays zijn...). Ik snap echt niet wat je hier nu mee wilt bereiken namelijk.

edit:
Maar in veel gevallen vindt ik wel dat een hoop mensen je toch gewoon weer het bos in sturen
Logisch, anders weet je het de volgende keer weer niet en plemp je je vraag weer hier. Als je zelf weet te verzinnen hoe je problemen kunt oplossen dan heb je daar veel meer aan en kun je er (vind ik) veel meer voldoening uit halen. Begin dus eerst simpel en kijk niet teveel naar grote applicaties, die hebben vaak echt niet de beste werkwijze.

[ Voor 58% gewijzigd door Cartman! op 18-10-2009 12:09 ]


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 11:03

DataGhost

iPL dev

josvane schreef op zondag 18 oktober 2009 @ 12:00:
Dat de fout onstaat is omdat ik die functie nu feitelijk verkeerd aanroep. Het lukt mij nog steeds niet om boven water te krijgen hoe dit dan werkt.
Als ik er van maak
PHP:
1
$this->functie('a');
Dan krijg ik wel netjes de melding terug van this function is used.
Laatste keer dat ik keek roep je in PHP gewoon NOOIT een functie aan door middel van blokhaken, dus ik vraag me af waarom je denkt dat je de functie uberhaupt aanroept? Er staat in de foutmelding ook duidelijk 'undefined property' (hint: een functie in een klasse heet geen property). Met de volgende code kan je hopelijk uit de gegeven meldingen begrijpen hoe en wat.

PHP:
1
2
3
4
5
6
7
8
9
10
error_reporting(E_ALL);
class a {
    public function a() { echo "a()\n"; }
    public $b = array();
}
$a = new a();
$a->a['a'];
$a->b['b'];
$a->a('a');
$a->b('b');

Acties:
  • 0 Henk 'm!

  • XyritZz
  • Registratie: Augustus 2003
  • Laatst online: 15-09 15:21
Ik begrijp je probleem nog niet helemaal, maar je zou eens kunnen kijken naar de magic method __get(). Deze wordt automatisch aangeroepen wanneer je een undefined property probeert te benaderen.

In deze functie zou je dan kunnen zetten dat hij je functie() aanroept, en de juiste waarde uit je array returned.

http://www.php.net/manual....oop5.overloading.members


Daarnaast zit er in PHP5 de Standard PHP Library, daar zitten ook grappige dingen in als de ArrayAccess interface, daarmee zou je een instantie van je klas klasse als array benaderbaar kunnen maken maar volgens mij is dat niet wat je zoekt.

http://php.net/manual/en/class.arrayaccess.php

I think there is a world market for maybe five computers. - Thomas Watson (1874-1956), Directeur van IBM (1943)


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 10:25
josvane schreef op zondag 18 oktober 2009 @ 12:00:
@rayman

[...]

Het is niet dat het niet werkt, ik wil graag snappen hoe de techniek van phpbb werkt en of het toepasbaar is voor mij, ik snap dat je hier op tweakers niet aan het handje meegenomen wordt. Maar in veel gevallen vindt ik wel dat een hoop mensen je toch gewoon weer het bos in sturen
Ik gaf het verschil tussen de twee regels uit de startpost aan en NMe deed dat ook al (uitgebreider zelfs met concrete variabele- en functienamen). Verder moet je inderdaad gewoon weten wat functies en arrays zijn en hoe je ze gebruikt en dan is het niet zo ingewikkeld.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Raynman schreef op zondag 18 oktober 2009 @ 12:24:
[...]

Ik gaf het verschil tussen de twee regels uit de startpost aan en NMe deed dat ook al (uitgebreider zelfs met concrete variabele- en functienamen). Verder moet je inderdaad gewoon weten wat functies en arrays zijn en hoe je ze gebruikt en dan is het niet zo ingewikkeld.
En daar wil ik dit topic graag bij laten. Het enige wat je uit moet zoeken is hoe functies en arrays werken. Als je dat weet, dan weet je ook wat het verschil is tussen jouw methode en die van phpBB én waarom je niet zomaar je aanroep kan veranderen en verwachten dat het werkt. Meer dan we je nu al hebben verteld in dit topic kunnen we toch niet doen, de rest zul je zelf uit moeten vinden. Koop een goed boek. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.