Beste mensen,

Korte vraag. Waarom komt hier wel mijn array uit de functie:


<?php
$resultSet = new dbController();

echo '<pre>'; print_r($resultSet->resultToArray("SELECT * FROM users")); echo '</pre>';
?>


En op deze manier niet:


<?php
echo '<pre>'; print_r(new dbController()->resultToArray("SELECT * FROM users")); echo '</pre>';
?>



Logisch gezien zie ik geen fout in de denkwijze/methode. Is het misschien dat ik de aanroep wijze fout doe bij de niet werkende manier?


Gr. Erwin
Zo dan?
<?php
echo '<pre>'; print_r((new dbController())->resultToArray("SELECT * FROM users")); echo '</pre>';
?>

Wat beter is in zo'n geval is een statische methode aanmaken..
dan kan je zo doen:
<?php
echo '<pre>'; print_r(dbController::resultToArray("SELECT * FROM users")); echo '</pre>';
?>
Het werkt helaas beiden niet : (.

Ook instancen in een variable werkt niet.. Voorbeeldje hiervan:


<?php
$results = new dbController()->resultToArray("SELECT * FROM users WHERE id = 0");
?>



Dit is nu de code:

<?php
require('library/classess/database.php');

$resultSet = new dbController();
$results = $resultSet->resultToArray("SELECT * FROM users WHERE id = 0");

if ($results) {
	echo '<pre>'; print_r($results); echo '</pre>';
}
else {
	echo 'Er is een fout geconstateerd in de query.';
}
?>



Snelle p.s. vraag tussendoor: Wat is nog weer het verschil tussen private en protected?
Of een static methode een opties is hangt af van de situatie. Ik ken jou code niet, maar als je de constructor voor een taak gebruikt is een static methode (waarschijnlijk) geen optie. Bovendien moet je dan je code aanpassen en het static keyword gebruiken.

Wat is eigenlijk het probleem van eerst een instantie aan moeten maken? Dat is toch heel normaal, kan je die meteen ook meerdere keren gebruiken, scheelt weer resources.

private/protected:
private kan alleen binnen de klasse zelf aangesproken worden.
protected kan ook in afgeleide (child) klasse aangesproken worden.
Java staat het wel toe dat je direct een method-aanroep plakt achter het aanmaken van een nieuwe instantie, PHP niet. Kan de parser niet aan.

Er is wel een trucje om er omheen te komen, sort of:
<?php
function R($a) {
return $a;
}

print_r(R(new dbController())->resultToArraY());
?>
even een kleine opmerking

je kan ook doen


echo "<pre>" . print_r($result,1) . "</pre>";


in plaats van


echo '<pre>'; print_r($results); echo '</pre>';

Reageren