mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 06:38 Benutzername: Passwort: Auto-Login

Thema: PHP - Viele Fragen :O vom 31.05.2015


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP - Viele Fragen :O
Autor Nachricht
DenenFX
Threadersteller

Dabei seit: 27.05.2015
Ort: -
Alter: -
Geschlecht: -
Verfasst So 31.05.2015 19:12
Titel

PHP - Viele Fragen :O

Antworten mit Zitat Zum Seitenanfang

Hey Lächel

Da ich in der offizielen PHP Dokumentation nichts verstehe hoffe ich das mir hier jemand weiterhelfen kann Lächel

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 Lächel

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 Lächel

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 *bäh*

Danke Lächel
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
DEKONSTRUKTIV

Dabei seit: 22.06.2009
Ort: bln
Alter: -
Geschlecht: -
Verfasst Mo 01.06.2015 08:49
Titel

Antworten mit Zitat Zum Seitenanfang

1) http://php.net/manual/de/control-structures.foreach.php
2) http://php.net/manual/de/function.in-array.php
3) das ist keine funktion, sondern eine methode, die per $this zugriff auf alle eigenschaften der klasse hat.
4) http://de.wikipedia.org/wiki/Signatur_%28Programmierung%29
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 01.06.2015 09:39
Titel

Antworten mit Zitat Zum Seitenanfang

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 ... Grins


Zuletzt bearbeitet von qualidat am Mo 01.06.2015 09:40, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
JohnnyCage
Gesperrt

Dabei seit: 11.12.2012
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 01.06.2015 11:26
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 01.06.2015 15:31
Titel

Antworten mit Zitat Zum Seitenanfang

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 ... Grins


Möglicherweise ist das auch quatsch:
http://en.wikipedia.org/wiki/Dereference_operator
  View user's profile Private Nachricht senden
DenenFX
Threadersteller

Dabei seit: 27.05.2015
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 02.06.2015 19:57
Titel

Antworten mit Zitat Zum Seitenanfang

Es haben sich jetzt alle Fragen erledigt ^^
Danke an alle Lächel
(Hab es mir selber mal wieder schwerer gemacht als es eigentlich ist Grins)
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen Fragen
2 PHP Fragen...
2 Fragen zum web
eps fragen
Fragen zu Java
Fragen zum Upgrade auf CS6
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.