php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.11.2011, 21:35  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 10
PHP-Kenntnisse:
Anfänger
Horatio befindet sich auf einem aufstrebenden Ast
Standard Kurze IF-Form

Hallo! Ich habe eine kleine Frage:
Warum funktioniert dieses Ausgeschriebene IF:
PHP-Code:
if ($tab == "intro")
    
$progress1 $active;
else
{
    if (
$progress 1)
        
$progress1 $completed;
    else
        
$progress1 "";

aber diese Kurze IF-Form nicht:
PHP-Code:
$progress1 = ($tab == "intro") ? $active : ($progress 1) ? $completed ""
Was mache ich an der kurzen falsch?
Horatio ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.11.2011, 21:49  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Horatio Beitrag anzeigen
Was mache ich an der kurzen falsch?
Du beachtest Operator-Rangfolge und -Assoziativität nicht.
http://www.php.net/manual/en/languag...precedence.php
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 08.11.2011, 22:09  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 10
PHP-Kenntnisse:
Anfänger
Horatio befindet sich auf einem aufstrebenden Ast
Standard

So, ich habe mir das jetzt durchgelsen. Ich verstehe allerdings kaum etwas davon. Kann mir das jemand mal bitte erklären?
Horatio ist offline   Mit Zitat antworten
Alt 08.11.2011, 22:12  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Hast du denn gesehen dass genau die Verkettung von ?: dort als Beispiel auftaucht? Achte dabei auf die Klammern, da hast du die Links-Assoziativität von ?: direkt für deinen Fall anschaulich gemacht.

Die Lösung liegt auf der Hand: Selber Klammern setzen.
fab ist offline   Mit Zitat antworten
Alt 08.11.2011, 22:19  
Neuer Benutzer
 
Registriert seit: 20.10.2011
Beiträge: 10
PHP-Kenntnisse:
Anfänger
Horatio befindet sich auf einem aufstrebenden Ast
Standard

Ist das so richtig:
PHP-Code:
($tab == "intro") ? ($progress 1) ? $completed "" $active 
Horatio ist offline   Mit Zitat antworten
Alt 08.11.2011, 22:27  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Nein, das ist totaler Nonsense.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 08.11.2011, 23:34  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

a ? b : (c ? d : e)
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 09.11.2011, 09:39  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Und nach meiner bescheidenen Meinung ist das Verwenden von verschachtelten ternären Operatoren tödlich für die Wartung.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 09.11.2011, 09:57  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

..lag mir auch auf der Zunge. Wenn dann der/die Ersteller noch Probleme mit diesen Operatoren haben, sollten Sie erst recht beim if else bleiben.
jspit ist offline   Mit Zitat antworten
Alt 09.11.2011, 11:49  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Ich persönlich würde ternary operators auch nicht bis ins Wartungsnirvana nutzen, sondern nur soweit es die Lesbarkeit duldet. Gerne z.b. Nutz ich ternary operators um Daten aus dem Web vorzubereiten und "interne" Variablen damit zu befüllen:

Initialisierend...
PHP-Code:
$page = isset($_GET['page']) ? $_GET['page'] : false
Auch komplexer...
PHP-Code:
<!DOCTYPE html !>
<html lang="de">
<head>
    <title>ternary test page for forms</title>
    <meta charset="utf-8" />
</head>
<body>

<div id="status">
<?php

    $requireFields 
= array('a','e');
    
    
// transport POST-Data
    
    
$formData['a'] = isset($_POST['a']) ? $_POST['a'] : null;
    
$formData['b'] = isset($_POST['b']) ? $_POST['b'] : null;
    
$formData['c'] = isset($_POST['c']) ? $_POST['c'] : null;
    
$formData['d'] = isset($_POST['d']) ? $_POST['d'] : null;
    
$formData['e'] = isset($_POST['e']) ? $_POST['e'] : null;
    
    
// identify form
    
    
$formData count
        
array_intersect_key
            
array_flip(array_keys($formDatanull)), 
            
array_flip($requireFields
        ) 
    ) == 
$formData false;
    
    
// go
    
    
if ( $formData ) {
    
        echo 
"Das Formular wurde ausreichend ausgefüllt, vielen Dank für Ihre Daten.";
    
    }
    
?></div>
<div>
<form method="post" action="">
    <input type="text" name="a" />
    <input type="text" name="b" />
    <input type="text" name="c" />
    <input type="text" name="d" />
    <input type="text" name="e" />
    <input type="submit" name="sender" />
</form>
</div>
</body>
</html>
Aber da hats irgendwo seine grenzen der Lesbarkeit.

Vorteilhaft, weil sehr kurz definiert sind auch Instanziierungsmethoden des Singleton-Patterns mit ternary operators:
PHP-Code:
class SingletonObject {

   private static 
$_instance;

   protected function 
__construct() {}
   protected function 
__clone() {}

   public static function 
getInstance() {
      return 
is_null(self::$_instance) ? self::$_instance = new self self::$_instance;
   }


anstelle von:
PHP-Code:
class SingletonObject {

   private static 
$_instance;

   protected function 
__construct() {}
   protected function 
__clone() {}

   public static function 
getInstance() {
      if ( 
self::$_instance === NULL ) {
         
self::$_instance = new self;
      }
      return 
self::$_instance;
   }


__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (09.11.2011 um 13:21 Uhr). Grund: singleton instancing procedures hinzugefügt.
tr0y ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit form action arreis JavaScript, Ajax und mehr 5 19.07.2011 19:23
Kontaktformular Problem .... root-2k10 PHP Einsteiger 5 16.03.2011 08:15
Dynamisches laden Ajax + Form verschicken starchild JavaScript, Ajax und mehr 10 18.02.2011 22:45
mit form buttom unterschiedliche variabeln übergeben kyle2010 PHP Tipps 2010 7 31.03.2010 16:36
POST form self PHP und direkt form Daten in URL übergeben Rutor PHP Tipps 2010 0 20.02.2010 17:56
[Erledigt] mauscursor ändern wenn man über link fährt Philipp6020 PHP Tipps 2009 17 07.01.2010 15:14
[Erledigt] Werte aus Textfeld an form action übergeben KevinS PHP Tipps 2009 8 09.03.2009 14:31
[Erledigt] Form Action turntab HTML, Usability und Barrierefreiheit 2 21.01.2009 13:49
[Erledigt] form speichert nicht alle felder auf einmal taurus Datenbanken 4 05.11.2008 19:51
[Erledigt] form in db schreiben... taurus PHP Tipps 2008 13 02.11.2008 12:01
Mail Form an verschiedene Empfänger donjoh PHP Tipps 2008 4 18.06.2008 15:38
ein form mit 2 versch. button - actions PHP Tipps 2005-2 3 27.08.2005 21:26
Daten in HTML form aus einer Query anzeigen PHP Tipps 2005 1 15.02.2005 21:03
Greenhorn: Reload einer IMG-Datei nach SUBMIT einer Form PHP Tipps 2004 3 20.09.2004 21:19
Mail bei Form Abschicken. JEGO PHP Tipps 2004 9 10.06.2004 17:18

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
if form, if [ -n $form_

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:22 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum