macabre_sunsets Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Το echo sprintf('test %s', 2) και το echo 'test '.2 παράγουν το ίδιο αποτέλεσμα. Υπάρχει κάποια επιβάρυνση στον server κατά της χρήση της sprintf; Ή απλά για λόγους ευκολίας χρησιμοποιείται περισσότερο ο δεύτερος τρόπος;
infinitus_maximus Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Το echo sprintf('test %s', 2) και το echo 'test '.2 παράγουν το ίδιο αποτέλεσμα. Υπάρχει κάποια επιβάρυνση στον server κατά της χρήση της sprintf; Ή απλά για λόγους ευκολίας χρησιμοποιείται περισσότερο ο δεύτερος τρόπος; ...και βέβαια. Η sprintf κάνει και "φορμάρισμα" εξόδου καθώς και κάποιους ελέγχους. Εξού και το f στο τέλος της συνάρτησης. Επειδή η PHP είναι γραμμένη σε C οι προγραμματιστές της είναι επηρεασμένοι από την τεχνοτροπία της C και πολλές φορές αυτό φένεται και στην PHP όπως εδώ στην περιπτωσή σου. Βλέπεις στην C ότι function έχει 'f' στο τέλος σημαίνει κατά κανόνα ότι κάνει και φορμάρισμα. Αυτά, ελπίζω να σε βοήθησα.
macabre_sunsets Δημοσ. 1 Δεκεμβρίου 2010 Μέλος Δημοσ. 1 Δεκεμβρίου 2010 Ευχαριστώ για την απάντηση. Κάτι τέτοιο φοβόμουν και εγώ. Απλά μου είναι πιο βολικό να χρησιμοποιώ την sprintf για να μην μπερδεύομαι με τα «αυτάκια».
Haldol Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Κακώς φοβάσαι τα «αυτάκια». Παίζει να είναι ο πιο εύκολος και straight-forward τρόπος που υπάρχει για να ενώνεις strings, ανεξαρτήτως γλώσσας. Απλά πράγματα: ένα string ορίζεται μέσα σε μονά εισαγωγικά (τα «αυτάκια» που λες). Ενώνεις πολλά strings, όταν ανάμεσα σε αυτά βάλεις μια τελεία. Πόσο πιο απλό; >$foo = 'fo'.'foo'.'fooo'.'foooo';
infinitus_maximus Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Κακώς φοβάσαι τα «αυτάκια». Παίζει να είναι ο πιο εύκολος και straight-forward τρόπος που υπάρχει για να ενώνεις strings, ανεξαρτήτως γλώσσας. Απλά πράγματα: ένα string ορίζεται μέσα σε μονά εισαγωγικά (τα «αυτάκια» που λες). Ενώνεις πολλά strings, όταν ανάμεσα σε αυτά βάλεις μια τελεία. Πόσο πιο απλό; >$foo = 'fo'.'foo'.'fooo'.'foooo'; Προφανώς ο φίλος το λέει για περιπτώσεις που θέλει να περνάει μεταβλητές και παραμέτρους ή αυτάκια μέσα σε αυτάκια και θέλει να έχει και ' και " οπότε πρέπει να πεδέυεται με τα escaping... E, ΟΚ λογικό μου ακούγεται να τα "φοβάται" λίγο!
macabre_sunsets Δημοσ. 1 Δεκεμβρίου 2010 Μέλος Δημοσ. 1 Δεκεμβρίου 2010 Προφανώς ο φίλος το λέει για περιπτώσεις που θέλει να περνάει μεταβλητές και παραμέτρους ή αυτάκια μέσα σε αυτάκια και θέλει να έχει και ' και " οπότε πρέπει να πεδέυεται με τα escaping... E, ΟΚ λογικό μου ακούγεται να τα "φοβάται" λίγο! Ακριβώς αυτό! Και μετά άντε να βρεις πού θέλει \" ή \' ή που έχεις ξεχάσει ένα ' ή μήπως "; edit: Μιας και άνοιξα το thread, μια ακόμα απορία. Έχει διαφορά η τελεία με το κόμα; Επειδή έχω δει να χρησιμοποιείται και το κομα για «ένωση» δεδομένων.
Haldol Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Για τέτοιες περιπτώσεις θα ήταν πολύ πιο λογικό να χρησιμοποιήσει double quotes, τα οποία κάνουν parsing των μεταβλητών που εμπεριέχονται στο string. Π.χ.: >$foo = 'bar'; $bar = "foo $foo"; // το $bar θα γίνει 'foo bar'
macabre_sunsets Δημοσ. 1 Δεκεμβρίου 2010 Μέλος Δημοσ. 1 Δεκεμβρίου 2010 Ενδιαφέρουσα και αυτή η άποψη! Θα την έχω υπ'όψιν μου.
infinitus_maximus Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Για τέτοιες περιπτώσεις θα ήταν πολύ πιο λογικό να χρησιμοποιήσει double quotes, τα οποία κάνουν parsing των μεταβλητών που εμπεριέχονται στο string. Π.χ.: >$foo = 'bar'; $bar = "foo $foo"; // το $bar θα γίνει 'foo bar' Haldol πολύ όμορφα τα απλοποιείς όλα αλλά στην περίπτωση που έχεις ας πούμε SQL και θές να υπάρχει interchange αυτών πώς αλλιώς θα το κάνεις? Παράδειγμα 1: > $user = "ICE's cube"; $sql_com = "SELECT `user_id` FROM {ANY_TABLE} WHERE (`username` = '" . $user . "' OR `email` = '" . $_GET['email'] . "')"; Εδώ θα σκάσει το SQL...και καλά αυτό είναι ένα άστοχο παράδειγμα γιατί το πιο μεγάλο πρόβλημα θα το έχεις εάν κάνεις echo HTML. Παράδειγμα 2: > $link = "http://www.insomnia.gr/"; $label = "Hack n' Slash"; echo '<a href="$link" target="_blank">' . $label . '<a/>'; Εδώ θα σκάσει το echo γιατί έχεις ένα ' στο $label! macabre_sunsets, όχι το κόμα δεν έχει αυτή την ιδιότητα κάτι άλλο θα είδες μάλλον...
_tasos Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Παράδειγμα 2: > $link = "http://www.insomnia.gr/"; $label = "Hack n' Slash"; echo '<a href="$link" target="_blank">' . $label . '<a/>'; Εδώ θα σκάσει το echo γιατί έχεις ένα ' στο $label! Το παράδειγμα 2 δεν θα δουλέψει διότι το echo είναι με ' και όχι με ". Αυτό που θα βγάλει το echo είναι ><a href="$link" target="_blank">Hack n Slash<a/> Για να παίξει αυτό που πρότεινε ο Haldol πρέπει το echo να είναι με ". Δηλαδή: >echo "<a href='$link' target='_blank'>" . $label . "<a/>"; ή echo "<a href=\"$link\" target=\"_blank\">" . $label . "<a/>"; Σε καμία περίπτωση δεν έχει σχέση με τη τιμή της μεταβλητής $label (αν έχει ή όχι το χαρακτήρα '). Εκτός κ αν με το παράδειγμα αυτό εννοείς κάτι άλλο...
infinitus_maximus Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Το παράδειγμα 2 δεν θα δουλέψει διότι το echo είναι με ' και όχι με ". Αυτό που θα βγάλει το echo είναι ><a href="$link" target="_blank">Hack n Slash<a/> Για να παίξει αυτό που πρότεινε ο Haldol πρέπει το echo να είναι με ". Δηλαδή: >echo "<a href='$link' target='_blank'>" . $label . "<a/>"; ή echo "<a href=\"$link\" target=\"_blank\">" . $label . "<a/>"; Σε καμία περίπτωση δεν έχει σχέση με τη τιμή της μεταβλητής $label (αν έχει ή όχι το χαρακτήρα '). Εκτός κ αν με το παράδειγμα αυτό εννοείς κάτι άλλο... Αγαπητέ _tasos δεν μπορείς να έχεις τη δομή echo "<a href='$link' target='_blank'>" . $label . "<a/>"; γιατί πολύ απλά αυτό δε σου παράγει ένα valid HTML element γιατί πολύ απλά δεν υπάρχει πρότυπο της HTML που να πέρνει μονό quote για ορίσματα. Δεν έχω να προσθέσω κάτι άλλο.
_tasos Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 Αγαπητέ _tasos δεν μπορείς να έχεις τη δομή echo "<a href='$link' target='_blank'>" . $label . "<a/>"; γιατί πολύ απλά αυτό δε σου παράγει ένα valid HTML element γιατί πολύ απλά δεν υπάρχει πρότυπο της HTML που να πέρνει μονό quote για ορίσματα. Δεν έχω να προσθέσω κάτι άλλο. Ο παρακάτω κώδικας κάνει validate σαν XHTML 1.0 Transitional. Αν θέλεις δοκίμασε το στο http://validator.w3.org/. ><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Test</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p> <a href='default.htm'>Hack n' Slash</a> </p> </body> </html>
infinitus_maximus Δημοσ. 1 Δεκεμβρίου 2010 Δημοσ. 1 Δεκεμβρίου 2010 OK. Καλή φάση με XHTML δεν έχω καλή επαφή... SUPER!
macabre_sunsets Δημοσ. 2 Δεκεμβρίου 2010 Μέλος Δημοσ. 2 Δεκεμβρίου 2010 macabre_sunsets, όχι το κόμα δεν έχει αυτή την ιδιότητα κάτι άλλο θα είδες μάλλον... Το θυμάμαι επειδή μου είχε κάνει εντύπωση. Παραθέτω ένα μικρό κομμάτι κώδικα, από το SMF: >echo ' <div> <div> <textarea class="editor" name="', $editor_id, '" id="', $editor_id, '" rows="', $editor_context['rows'], '" cols="', $editor_context['columns'], '" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);" tabindex="', $context['tabindex']++, '" style="', $context['browser']['is_ie8'] ? 'max-width: ' . $editor_context['width'] . '; min-width: ' . $editor_context['width'] : 'width: ' . $editor_context['width'], '; height: ', $editor_context['height'], ';', isset($context['post_error']['no_message']) || isset($context['post_error']['long_message']) ? 'border: 1px solid red;' : '', '">', $editor_context['value'], '</textarea> </div>[...] Γιατί χρησιμοποιεί κόμα εδώ;
parsifal Δημοσ. 2 Δεκεμβρίου 2010 Δημοσ. 2 Δεκεμβρίου 2010 http://www.php.net/manual/en/function.echo.php > void echo ( string $arg1 [, string $... ] ) Όπως βλέπεις, δέχεται πολλαπλά arguments χωρισμένα με κόμμα. Όταν εσύ κάνεις concatenation, αποτιμάται πρώτα το αποτέλεσμα όλων αυτών των συνενώσεων και τελικά εκτελείται η echo με ένα μοναδικό string ως όρισμα. Επίσης, ως language construct (και όχι function) που είναι, λογικά πρέπει να είναι και πιο γρήγορη από print και Σία, αν κάτι τέτοιο σε ενδιαφέρει.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.