Ken je dat?
Het werkt jaren.
Je zet het over en het werkt niet meer.
Alles geprobeerd maar niks.
Ik geef de essentie:
<?php
header("cache-control: no-store, max-age: 0");
class site {
function site() {
$this->test = "Dit is de test";
}
}
$site = new site();
echo "test: ".$site->test;
?>
> In de originele class zitten wel honderd properties er zijn nog meer classes.
Lijkt mij toch niet dat ik alle properties één voor één public zou moeten moeten maken.
Je hebt geluk dat PHP (nog steeds) erg flexibel is. Als je geen property declareert dan maakt PHP er "on the fly" een public property van.
Maar een goede gewoonte is om je class variabelen netjes te declareren en eventueel te initialiseren.
class Test {
public $a; // declaratie
public $b = 0; // declaratie en initialisatie
}
Of:
class Test {
public $a; // declaratie
public $b; // declaratie
public function __construct()
{
$this->b = 0; // initialisatie
}
}
[size=xsmall]Toevoeging op 14/03/2022 18:56:54:[/size]
Als een class meer dan enkele tientallen variabelen heeft dan klinkt mij het in de oren als dat je class veel te veel verantwoordelijkheden heeft die je eigenlijk zou moeten uitsplitsen over meerdere classes...
?
Onbekende gebruiker
15-03-2022 08:49
Het voorbeeld kan met minder code toe:
<?php
class site {
public $test = 'Dit is de test';
}
echo 'test: ' . (new site)->test;
?>
Frank Nietbelangrijk op 14/03/2022 18:54:01
> In de originele class zitten wel honderd properties er zijn nog meer classes.
Lijkt mij toch niet dat ik alle properties één voor één public zou moeten moeten maken.
Dat PHP 'automatisch' de waarden aanmaakt lijkt handig, maar je debugged je helemaal suf als je ergens per ongeluk een tikfoutje hebt gemaakt.
Daarom hebben veel mensen een basisklasse van waarop elke andere klasse extend:
<?php
abstract class basis {
protected function fout($k) {
trigger_error('Eigenschap "' . $k . '" van object "'
. get_class($this) . '" bestaat niet of is niet publiek.');
}
function __get(string $k) {$this->fout($k);}
function __set(string $k, $v) {$this->fout($k);}
}
class site extends basis [...]
?>