Namespaces en fetch_object()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander V

Sander V

23/11/2015 22:27:01
Quote Anchor link
ik heb van mijn Blog class een namespace gemaakt.

Quote:
namespace Blog;
class Blog extends \Resources{
}


Maar nu krijg ik een fatal error als ik via fetch_object() de blog class wil laden:

Quote:
fetch_object($sClassName)


Error:

Quote:
Fatal error: Class 'Blog' not found in ..... on line 99


Nu kan ik niet achterhalen wat probleem is. Als ik de namespace weg haal gaat alles prima.
Gewijzigd op 23/11/2015 22:27:38 door Sander V
 
PHP hulp

PHP hulp

26/11/2024 18:20:47
 
Ben van Velzen

Ben van Velzen

23/11/2015 22:29:48
Quote Anchor link
Gebruik je wel use Blog\Blog in je code (of roep je de class aan als Blog\Blog) zoals noodzakelijk is bij gebruik van namespaces?
 
Sander V

Sander V

23/11/2015 22:40:07
Quote Anchor link
Gebruik helemaal geen use.

Waar het op stuk gaat is het volgende:

ik roep een andere class aan BlogManager::getAllBlogItems() En in die functie (getAllBlogItems())

haal ik alle blog data op op basis van het object: $aBlogItems = $dbc->query($sQuery, QRY_OBJECT, "Blog");

En dan kom je bij mijn Database connection class die dus volgende functie uitvoert: fetch_object($sClassName)
 
Ivo P

Ivo P

23/11/2015 23:12:34
Quote Anchor link
en kom je dan via fetch_object() op een plek waar die regel 99 in de buurt staat?

Ik vermoed dat daar iets staat als

new $sClassName();

en dat je script daar niet door heeft dat er een namespace bij hoort die niet meegegeven wordt.

probeer het eens met

$aBlogItems = $dbc->query($sQuery, QRY_OBJECT, "Blog\Blog");
 
Sander V

Sander V

23/11/2015 23:34:42
Quote Anchor link
Ivo P op 23/11/2015 23:12:34:

probeer het eens met

$aBlogItems = $dbc->query($sQuery, QRY_OBJECT, "Blog\Blog");


dan krijg ik volgende error:

Fatal error: Class 'Blog/Blog' not found in /..../DatabaseCon.class.php on line 51

Op line 51 staat:

Quote:
while ($oRow = $oResult->fetch_object($sClassName)) {
$aArr[] = $oRow;
}
 
Ivo P

Ivo P

24/11/2015 01:42:39
Quote Anchor link
welke slash gebruik je? / of \ ?
 
Sander V

Sander V

24/11/2015 08:34:41
Quote Anchor link
Ik gebruik /
 
Ivo P

Ivo P

24/11/2015 09:05:12
 
Sander V

Sander V

24/11/2015 09:20:24
Quote Anchor link
Nee dan ook niet. Dan kan hij het bestand niet vinden.

Ik heb het idee dat het hierom fout gaat: Ik roep namelijk deze functie aan:

BlogManager::getAllBlogItems();

en dat is deze functie binnen de BlogManager class:

class BlogManager {

public static function getAllBlogItems() {

$sQuery = "QUERYSTRING";

$dbc = new DatabaseCon();
$aBlogItems = $dbc->query($sQuery, QRY_OBJECT, "Blog/Blog");

return $aBlogItems;
}

}
Gewijzigd op 24/11/2015 09:23:00 door Sander V
 
Ivo P

Ivo P

24/11/2015 09:24:49
Quote Anchor link
Het scheidingsteken voor de verschillende niveau's van namespaces is de \

Heb jij ergens een autoloader die op zoek gaat naar de file met de de class Blog?
Is de map waarin de genamespacede class staat anders dan als het gewoon om de hoofd namespace gaat?

Hoe zoekt je script de file op?


Welk script geeft (op regel 99) nu eigenlijk de foutmelding?

Toevoeging op 24/11/2015 09:27:28:

ah niet regel 99
zie dat het 51 is geworden.

Maar dat is wat vreemd want op die regel is geen sprake van het aanroepen van een class.
hooguit van de naam van een class in een string, maar daar hoeft nog niet direct de class zelf te staan.

Wat is de complete foutmelding? (evt met path wat geanonimiseerd )
 
Sander V

Sander V

24/11/2015 09:47:28
Quote Anchor link
Het is me gelukt! Het was inderdaad de back- en forward slash.

Kwam door mijn autoloader. Maar die vervangt nu de backslash voor een forward slash en dan gaat het goed.
Dan haalt hij de juiste bestand op en kan de class geladen worden.

Thanks voor jullie hulp.
 



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.