Und nochwas, darf ich Eigenschaften jederzeit überschreiben?
$pdf = new(klassenaufruf); $pdf->name = "Heinz"; ... ... ... $pdf->name = "doch lieber Hans";
Bastian
Das kommt darauf an, wie die Klasse definiert ist
Steht da:
class foo {
protected name="";
#…
}
Dann kannst Du das nicht. Es sei denn Du hast einen setter
, bzw. getter
:
<?php
# file: foo.class.php
class foo {
protected $name;
function __construct( $s = "Foo" ) {
$this -> setName( $s );
}
function setName( $s ) {
$s = trim( $s );
if ( $s ) {
$this->name = trim( $s );
return true;
} else {
return false;
}
}
function getName() {
return $this -> name;
}
}
Dann kannst Du das wie folgt machen:
<?php
require_once( 'foo.class.php' )
$f = new foo ('Bastian');
echo $f -> getName() . PHP_EOL;
$f -> setName( 'Hans' );
echo $f -> getName() . PHP_EOL;
$f -> setName( 'Willi' );
echo $f -> getName() . PHP_EOL;
# Bastian
# Hans
# Willi
Vorteil: Du kannst die übergebenen Werte prüfen ( if()
) und ggf. verändern ( trim()
), ggf. sogar eine Authorisierung prüfen.
Hast Du aber:
class foo {
public $name;
}
Dann kannst Du das „jederzeit“ - ohne eine Prüfung zu erzwingen.
$f = new foo;
$f -> name = 'Bastian';
echo $f -> name . PHP_EOL;
$f -> name = 'Hans';
echo $f -> name . PHP_EOL;
$f -> name = 'Willi';
echo $f -> name . PHP_EOL;
# Bastian
# Hans
# Willi
Die Variante 2 sieht einfacher aus, öffnet aber „jeder Menge Mist“ Tür und Tor. Oft will man genau das gerade nicht haben. Das wirst Du schon noch merken...