namespace en class
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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]
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]
Vergeet je niet de use waarin je aangeeft dat je de namespace gebruikt?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
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{
//...
}
?>
namespace Mijn\Name\Space;
use Sabre\DAV\Auth\Backend\AbstractBasic;
class sr extends AbstractBasic{
//...
}
?>
Of dus:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
namespace Mijn\Name\Space;
class sr extends \Sabre\DAV\Auth\Backend\AbstractBasic{
//...
}
?>
namespace Mijn\Name\Space;
class sr extends \Sabre\DAV\Auth\Backend\AbstractBasic{
//...
}
?>
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.
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.