namespace en class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Php knipper

php knipper

24/03/2020 18:37:35
Quote Anchor link
Hé lang geleden,

Ik zit met een probleempje, ik heb een site waar ik caldav in probeer te steken (zodat de kalenders beschikbaar zijn op gsm en pc). Nu loop ik vast bij het aansluiten van items.

Al mijn databank tabelen zijn classes, ik probeer deze nu dit in orde te brengen maar krijg onderstaande fout:
Quote:
Class 'Sabre\DAV\Auth\Backend\memberzoneLogin' not found


Ik weet dat het te maken heeft met namespace maar snap niet goed wat het doet en hoe ik dit kan oplossen. Kan iemand dit in het nederlands toelichten? ik vindt wel veel in het engels maar raak daar verward.

Alvast weer hartelijk bedankt voor jullie tijd.

Mvg. Knipper
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

namespace Sabre\DAV\Auth\Backend;

class sr extends AbstractBasic
{
    protected $mailbox;

    public function __construct($mailbox)
    {

        $this->mailbox = $mailbox;
    }


    protected function validateUserPass($username, $password)
    {

        $login = new memberzoneLogin();
        $login->setMail($username);
        $login->setPassword($password);
...
[
/code]
 
PHP hulp

PHP hulp

31/03/2020 21:10:21
 
- Ariën -
Beheerder

- Ariën -

24/03/2020 19:28:11
Quote Anchor link
Vergeet je niet de use waarin je aangeeft dat je de namespace gebruikt?
 
Rob Doemaarwat

Rob Doemaarwat

24/03/2020 20:21:41
Quote Anchor link
Volgens mij haal je use en namespace door elkaar. Dit is iets wat je zelf knutselt, dus gebruik je je eigen namespace. Je extend daarbij een SabreDav class. Die kun je via een use invoegen, of door gewoon de hele naam te gebruiken. Maar je gaat niet in de namespace van SabreDav zit "klooien".
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

namespace Mijn\Name\Space;

use Sabre\DAV\Auth\Backend\AbstractBasic;

class sr extends AbstractBasic{
//...
}

?>

Of dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

namespace Mijn\Name\Space;

class sr extends \Sabre\DAV\Auth\Backend\AbstractBasic{
//...
}

?>
 
Php knipper

php knipper

24/03/2020 21:09:00
Quote Anchor link
Ja dat klopt,

ik probeer die AbstractBasic uit te breiden met een eigen geschreven stukje zodat het werkt op een al bestaande gebruikers databank.

Hiervoor moet ik echter mijn memberzoneLogin() class kunnen aanroepen.

Alle bestanden worden via een include toegevoegd dus dat werkt normaal.
 
Rob Doemaarwat

Rob Doemaarwat

24/03/2020 21:18:16
Quote Anchor link
Als je memberzoneLogin() niet in een namespace zit (maar echt in een platte include .php file), dan moet je er gewoon een backslash voorzetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$login = new \memberzoneLogin();

Als je verder ook niks in/met een namespace doet kun je die declaratie bovenin ook weglaten (en dan kun je evt. bovenstaande backspace ook weer weglaten, maar het kan geen kwaad om 'm te laten staan).

Je kunt namespaces als directories zien. Met "namespace Foo\Bar" geef je aan dat je in de Foo\Bar directorie wilt gaan werken. Alle classes die je zonder verder verwijzing aanroept worden dus in die namespace/directory gezocht. Begin je de class naam echter met een backslash, dan geef je aan dat je class dus in de "root" namespace (geen namespace) gezocht moet worden. Of je kunt dus ook \Andere\Name\Space\MijnObject() doen.
 
Php knipper

php knipper

24/03/2020 21:48:23
Quote Anchor link
ha ha ha, zeer stom maar die \ doet het hem. Bedankt

ook bedankt voor de uitleg
Gewijzigd op 24/03/2020 21:48:41 door php knipper
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.