Autor |
Nachricht |
DenenFX
Threadersteller
Dabei seit: 27.05.2015
Ort: -
Alter: -
Geschlecht: -
|
Verfasst So 31.05.2015 18:12
Titel PHP - Viele Fragen :O |
|
|
Hey
Da ich in der offizielen PHP Dokumentation nichts verstehe hoffe ich das mir hier jemand weiterhelfen kann
Ich versuche mir im Moment selber PHP beizubringen und habe es auch schon geschafft einen Taschenrechner und ein Affenformular zu programmieren (das ist ja jetzt auch nicht sonderlich schwer ^^).
Im Moment schaue ich mir die Video-Tutorials von Lynda.com an (Object-Oriented Programming with PHP).
Einen großteil habe ich schon verstanden aber zu einigen Sachen habe ich noch Fragen
Es gibt aktuell 2 Dateien:
demo.php
Code: |
<?php
require 'class.Address.inc';
echo '<h2>Instantiating Address</h2>';
$address = new Address;
echo '<h2>Empty Address</h2>';
echo '<tt><pre>' . var_export($address, TRUE) . '</pre></tt>';
echo '<h2>Setting properties...</h2>';
$address->street_address_1 = '555 Fake Street';
$address->city_name = 'Townsville';
$address->subdivision_name = 'State';
$address->postal_code = '12345';
$address->country_name = 'United States of America';
$address->address_type_id = 1;
echo '<tt><pre>' . var_export($address, TRUE) . '</pre></tt>';
echo '<h2>Displaying address...</h2>';
echo $address->display();
echo '<h2>Testing magic __get and __set</h2>';
unset($address->postal_code);
echo $address->display();
echo '<h2>Testing Address __construct with an array</h2>';
$address_2 = new Address(array(
'street_address_1' => '123 Phony Ave',
'city_name' => 'Villageland',
'subdivision_name' => 'Region',
'postal_code' => '67890',
'country_name' => 'Canada',
));
echo $address_2->display();
echo '<h2>Address __toString</h2>';
echo $address_2;
echo '<h2>Displaying address types...</h2>';
echo '<tt><pre>' . var_export(Address::$valid_address_types, TRUE) . '</pre></tt>';
echo '<h2>Testing address type ID validation</h2>';
for ($id = 0; $id <= 4; $id++) {
echo "<div>$id: ";
echo Address::isValidAddressTypeId($id) ? 'Valid' : 'Invalid';
echo "</div>";
}
|
und
class.Address.inc
Code: |
<?php
class Address {
const ADDRESS_TYPE_RESIDENCE = 1;
const ADDRESS_TYPE_BUSINESS = 2;
const ADDRESS_TYPE_PARK = 3;
static public $valid_address_types = array(
Address::ADDRESS_TYPE_RESIDENCE => 'Residence',
Address::ADDRESS_TYPE_BUSINESS => 'Business',
Address::ADDRESS_TYPE_PARK => 'Park',
);
public $street_address_1;
public $street_address_2;
public $city_name;
public $subdivision_name;
protected $_postal_code;
public $country_name;
protected $_address_id;
protected $_address_type_id;
protected $_time_created;
protected $_time_updated;
function __construct($data = array()) {
$this->_time_created = time();
if (!is_array($data)) {
trigger_error('Unable to construct address with a ' . get_class($name));
}
if (count($data) > 0) {
foreach ($data as $name => $value) {
if (in_array($name, array(
'time_created',
'time_updated',
))) {
$name = '_' . $name;
}
$this->$name = $value;
}
}
}
function __get($name) {
if (!$this->_postal_code) {
$this->_postal_code = $this->_postal_code_guess();
}
$protected_property_name = '_' . $name;
if (property_exists($this, $protected_property_name)) {
return $this->$protected_property_name;
}
trigger_error('Undefined property via __get: ' . $name);
return NULL;
}
function __set($name, $value) {
if ('address_type_id' == $name) {
$this->_setAddressTypeId($value);
return;
}
if ('postal_code' == $name) {
$this->$name = $value;
return;
}
trigger_error('Undefined or unallowed property via __set(): ' . $name);
}
function __toString() {
return $this->display();
}
protected function _postal_code_guess() {
return 'LOOKUP';
}
function display() {
$output = '';
$output .= $this->street_address_1;
if ($this->street_address_2) {
$output .= '<br/>' . $this->street_address_2;
}
$output .= '<br/>';
$output .= $this->city_name . ', ' . $this->subdivision_name;
$output .= ' ' . $this->postal_code;
$output .= '<br/>';
$output .= $this->country_name;
return $output;
}
static public function isValidAddressTypeId($address_type_id) {
return array_key_exists($address_type_id, self::$valid_address_types);
}
protected function _setAddressTypeId($address_type_id) {
if (self::isValidAddressTypeId($address_type_id)) {
$this->_address_type_id = $address_type_id;
}
}
}
|
1. foreach ($data as $name => $value)
Warum $data as $name => $value?
Ich weiß das alles in $data innerhalb von foreach dann mit $name definiert wird (soviel habe ich von der PHP-Dokumentation verstanden...) aber was bedeutet das => $value?
Ich gehe mal nicht davon aus das das bedeutet ($data as $name) ist gleich oder größer als $value
2. Direkt in der nächsten Zeile
Code: | if (in_array($name, array(
'time_created',
'time_updated',
))) |
Das bedeutet ja soviel wie: Falls in dem Array eine Variable $name ist und ein Array mit folgendem Inhalt dann mach das oder?
3. Die komplette function __get($name) verstehe ich auch nicht...
Mein größtes Problem ist wohl wo die Variablen herkommen da ich nicht weiß wo die definiert sind - werden ^^
4. Genau das gleiche bei function __set($name, $value).
Woher weiß PHP ob address_type_id == $name ist wenn $name nicht definiert wird?
5. Noch eine Frage zu ::self.
::self ersetzt doch nur denn Namen der Klasse oder? Also anstatt Address-> benutzt man ::self weil der Address Typ static ist :O
Ich verwirre mich wahrscheinlich nur selber aber ich hoffe mal das jemand von euch mein Armes Gehirn wieder zurechtrühren kann
Danke
|
|
|
|
|
DEKONSTRUKTIV
Dabei seit: 22.06.2009
Ort: bln
Alter: -
Geschlecht: -
|
|
|
|
|
Anzeige
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 64
Geschlecht:
|
Verfasst Mo 01.06.2015 08:39
Titel
|
|
|
Die Schreibweise von Objekten und Properties ist in PHP "etwas" gewöhnungsbedürftig. In anderen OO Programmiersprachen sähe das z.B. so aus:
window.xposition
Zu interpretieren als Eigenschaft "xposition" des Objektes "window". Möglicherweise weil der Punkt in PHP schon für das Zusammenfügen von Strings besetzt war, sah man sich zu der Schreibweise mit dem "=>" genötigt. In der Geschichte von PHP wurde der OO-Ansatz ja auch erst später "drangebastelt" ... also
$window=>$xposition ...
Zuletzt bearbeitet von qualidat am Mo 01.06.2015 08:40, insgesamt 1-mal bearbeitet
|
|
|
|
|
JohnnyCage
Gesperrt
Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 01.06.2015 10:26
Titel
|
|
|
Da verwechselst du mal wieder was.
Und zwar Arrays mit Objekten und => mit ->.
Das -> das du eigentlich meinst stammt übrigens aus "anderen OO Programmiersprachen".
Die Erklärung für das => von dem der TE spricht findet sich in Demolitiondingsbums Links.
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 01.06.2015 14:31
Titel
|
|
|
qualidat hat geschrieben: | Die Schreibweise von Objekten und Properties ist in PHP "etwas" gewöhnungsbedürftig. In anderen OO Programmiersprachen sähe das z.B. so aus:
window.xposition
Zu interpretieren als Eigenschaft "xposition" des Objektes "window". Möglicherweise weil der Punkt in PHP schon für das Zusammenfügen von Strings besetzt war, sah man sich zu der Schreibweise mit dem "=>" genötigt. In der Geschichte von PHP wurde der OO-Ansatz ja auch erst später "drangebastelt" ... also
$window=>$xposition ... |
Möglicherweise ist das auch quatsch:
http://en.wikipedia.org/wiki/Dereference_operator
|
|
|
|
|
DenenFX
Threadersteller
Dabei seit: 27.05.2015
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Di 02.06.2015 18:57
Titel
|
|
|
Es haben sich jetzt alle Fragen erledigt ^^
Danke an alle
(Hab es mir selber mal wieder schwerer gemacht als es eigentlich ist )
|
|
|
|
|
|
|
|
Ähnliche Themen |
Fragen
2 PHP Fragen...
2 Fragen zum web
eps fragen
Fragen zu Alt-Tags...
2 html fragen!
|
|