Peter Skrevet 21. september 2007 Del Skrevet 21. september 2007 Har aldri hatt bruk for list() noensinne. 9546101[/snapback] Jeg kan peke ut hele seksjoner i PHP jeg aldri har hatt bruk for, men de er nå der, og det finnes sikkert en del som bruker dem også. At jeg ikke bruker dem har ofte med a) jeg trenger dem ikke, b) jeg aner ikke at de finnes, c) jeg foretrekker å gjøre ting på en annen måte. Bruk rett verktøy for jobben, det gjelder i alle tilfeller, men det innebærer at du må vite at verktøyet eksisterer, at man vet hvordan man bruker det, og er komfortabel med det. Er ikke list() litt overflødig? Altså, $array[0] osv går jo like fint så lenge man dokumenterer skikkelig. Vil det ikke ta lenger tid å parse om man skal bruke både list og explode? 9546497[/snapback] Tviler på at det er mye overhead. list er såvidt jeg husker en konstruksjon, ikke en funksjon. PHP gir bare variablene andre (gjerne mer beskrivende) navn enn $array[...]. Men utfør gjerne en test på slike ting, det er alltid interessant, selv om det kalles prematur optimalisering og sjelden er godt for mer enn selvfølelsen. Lenke til kommentar
dabear Skrevet 21. september 2007 Del Skrevet 21. september 2007 (endret) Huff, er det bare jeg som får frysninger av list() ? Ustandard og stygg syntaks 9543551[/snapback] Ustandard? Ja, som i at kun denne språkkonstruksjonen kan brukes på den måten Det er jo en del av språket! Da må det vel i høyeste grad være en del av "standarden" (om det i det hele tatt finnes en PHP-standard) Det finnes ingen php-standard, bare en de-facto implementasjon (og flere andre implementasjoner: roadsend php, php for mono og sikkert flere). Endret 21. september 2007 av dabear Lenke til kommentar
loathsome Skrevet 22. september 2007 Del Skrevet 22. september 2007 Når vi er inne på unødvendige funksjoner, hva med "define" (konstanter) - noen her som bruker det? Selv ser jeg på det som *høyst* unødvendig - vi har jo variabler? Lenke til kommentar
dabear Skrevet 22. september 2007 Del Skrevet 22. september 2007 variabler kan endre innhold, det kan ikke konstanter. Litt teit om du skulle kjøre error_reporting(E_ALL) to forskjellige plasser i koden, og du fikk forskjellig resultat? Lenke til kommentar
Peter Skrevet 22. september 2007 Del Skrevet 22. september 2007 Bruker define og const (i klasser) hele tiden. Det gjør koden mer oversiktlig etter min mening. Hva bruker du istedenfor konstanter da, loathsome? Vanlige variabler? Lenke til kommentar
Haraldson Skrevet 22. september 2007 Del Skrevet 22. september 2007 (endret) list( $navn, $adresse, $telefon ) = explode( '|', $mitt_arr ); Lurer på en sak, som jeg har prøvd å google opp. Jeg er ikke helt med på hvordan jeg skal loope gjennom og skrive ut infoen. Jeg får fra brukerinput en string som for eksempel ser slik ut; PHP <?php $aktorar ="Egon Olsen;Arve Opsahl;http://imdb.com/profile/ArveOpsahl Kjell;Carsten Byhring;http://imdb.com/profile/CarstenByhring/"; ?> Det jeg har forstått, er hvordan denne originale stringen skal deles opp i mindre biter. Men ikke om resultatet bør tilegnes til en list (og hvordan fungerer i tilfelle en list?) eller en vanlig variabel eller hva. Og ikke hvordan jeg looper gjennom informasjonen jeg deler opp eller skriver den ut. PHP <?php explode("NEWLINE", $aktorar); // Deler opp til enkeltaktører explode(";", $aktor); // Deler opp infoen om en enkelt aktør ?> Noen som har litt tid til overs tidlig en lørdags kveld og vil skrive et kjapt eksempel på hvordan loope gjennom og skrive ut informasjonen? Edit: Ser ikke ut som at -taggen likte newline. Endret 22. september 2007 av Haraldson Lenke til kommentar
loathsome Skrevet 22. september 2007 Del Skrevet 22. september 2007 Bruker define og const (i klasser) hele tiden. Det gjør koden mer oversiktlig etter min mening. Hva bruker du istedenfor konstanter da, loathsome? Vanlige variabler? 9549287[/snapback] Ja, det gjør jeg. Er jo bare å ikke endre de, det Lenke til kommentar
Gjest Slettet+6132 Skrevet 22. september 2007 Del Skrevet 22. september 2007 Ja, det gjør jeg. Er jo bare å ikke endre de, det Hva om det er et prosjekt med flere programmerere? DB_HOST, DB_USER osv er vel da mer praktisk? Lenke til kommentar
loathsome Skrevet 22. september 2007 Del Skrevet 22. september 2007 Praktisk og praktisk, er smak og behag imo Lenke til kommentar
Peter Skrevet 22. september 2007 Del Skrevet 22. september 2007 Praktisk og praktisk, er smak og behag imo 9549944[/snapback] Nei, det er rett og slett praktisk, for det garanterer at ikke noen gjør en feil som å omdefinere en konstant. Folk som er vant med typesterke språk er nok mer inn i denne tankegangen dog. (PHP5 er bare semi-typesterkt, og i tillegg kan du unngå å angi type om du vil.) Men for å si det på en annen måte: Hva du gjør i dine prosjekter der du (og likesinnende) er av samme oppfatning av konstanter og variabler, så står du selvsagt fri til å gjøre akkurat hva du vil og følge akkurat de konvensjonene du ønsker, men dersom du skal ut i arbeidslivet med PHP eller delta på store prosjekter, får du nok ganske garantert en eller annen reaksjon der du blir nødt til å innfinne deg med bruken av konstanter for nettopp konstante verdier. Lenke til kommentar
PHPdude Skrevet 22. september 2007 Del Skrevet 22. september 2007 Ja, det gjør jeg. Er jo bare å ikke endre de, det Hva om det er et prosjekt med flere programmerere? DB_HOST, DB_USER osv er vel da mer praktisk? 9549708[/snapback] DB_HOST og DB_USER? Mener du da at de skal inneholde host og brukernavn for en DB-tilkobling? Isåfall er da det misbruk av konstanter. Lenke til kommentar
Ståle Skrevet 22. september 2007 Del Skrevet 22. september 2007 Noen som har litt tid til overs tidlig en lørdags kveld og vil skrive et kjapt eksempel på hvordan loope gjennom og skrive ut informasjonen? 9549658[/snapback] Prover meg, selv o mdet er lenge siden jeg har programmert noe. PHP <?php $aktorar ="Egon Olsen;Arve Opsahl;http://imdb.com/profile/ArveOpsahl Kjell;Carsten Byhring;http://imdb.com/profile/CarstenByhring/"; $test1 = explode("", $aktorar); // Deler opp til enkeltaktører $i = 0; foreach( $test1 as $linje ) { $test[$i] = explode(";", $linje); // Deler opp infoen om en enkelt aktør ++$i; } var_dump( $test ); ?> Klikk for å se/fjerne spoilerteksten nedenfor array(2) { [1]=> array(3) { [0]=> string(10) "Egon Olsen" [1]=> string(11) "Arve Opsahl" [2]=> string(36) "http://imdb.com/profile/ArveOpsahl " } [2]=> array(3) { [0]=> string(9) " Kjell" [1]=> string(15) "Carsten Byhring" [2]=> string(39) "http://imdb.com/profile/CarstenByhring/" } } Lenke til kommentar
loathsome Skrevet 22. september 2007 Del Skrevet 22. september 2007 Ja, det gjør jeg. Er jo bare å ikke endre de, det Hva om det er et prosjekt med flere programmerere? DB_HOST, DB_USER osv er vel da mer praktisk? 9549708[/snapback] DB_HOST og DB_USER? Mener du da at de skal inneholde host og brukernavn for en DB-tilkobling? Isåfall er da det misbruk av konstanter. 9550781[/snapback] qMisbruk? Lenke til kommentar
PHPdude Skrevet 22. september 2007 Del Skrevet 22. september 2007 Konfigurasjonverdier er da ikke konstante verdier. Til mindre prosjekter kan det sikkert være enkelt og greit, men noen "best practice" kan det ikke kalles. Lenke til kommentar
Peter Skrevet 22. september 2007 Del Skrevet 22. september 2007 Konfigurasjonverdier er da ikke konstante verdier. Til mindre prosjekter kan det sikkert være enkelt og greit, men noen "best practice" kan det ikke kalles. 9551274[/snapback] Hvorfor ikke det? Er det noe som man burde kunne forandre gjennom programmets kjøretid? Med mindre du skal ha flere db-koblinger samtidig som ikke går til samme db, så ser jeg ikke problemet, men opplys meg gjerne Lenke til kommentar
Gjest Slettet+6132 Skrevet 22. september 2007 Del Skrevet 22. september 2007 Konfigurasjonverdier er da ikke konstante verdier. Til mindre prosjekter kan det sikkert være enkelt og greit, men noen "best practice" kan det ikke kalles.Jeg kan tenke på flere konfigurasjonsverdier som kan være konstante. SQL_HOST/USER/PASS/DATABASE, FILE_PATH, MAX_UPLOAD_SIZE osv, dette er konstante verdier som ikke skal endres mens programmet kjører, så hvorfor ikke? Lenke til kommentar
Haraldson Skrevet 22. september 2007 Del Skrevet 22. september 2007 Prover meg, selv o mdet er lenge siden jeg har programmert noe. 9550929[/snapback] Prøvde dette: PHP <?php $key="Produksjon: Aktørar CSV"; $aktorar = get_post_meta($post->ID, $key, true); $aktorar = trim($aktorar); $aktorar = explode("", $aktorar); // Deler opp til enkeltaktører $i = 0; foreach( $aktorar as $aktor ) { $aktor[$i] = explode(";", $aktor); // Deler opp infoen om en enkelt aktør ?> <tr class="aktor <? if(($i++ %2) == 0) {echo "even";}?>"> <th scope="row"><?php echo $aktor[$i][0]; ?></th> <td><?php if ( $aktor[$i][2] != null ) { ?> <a href="<?php echo $aktor[$i][2]; // URL ?>" title="<?php echo $aktor[$i][2]; // URL ?>"><?php } ?> <?php echo $aktor[$i][1]; /* Navn */ if ( $aktor[$i][2] != null ) { ?></a><?php } ?></td> </tr> <?php ++$i; } ?> Fikk denne feilmeldinga: Fatal error: Cannot use string offset as an array on line 58 Hva gjør jeg feil, og hva må det endres til? Lenke til kommentar
Martin A. Skrevet 22. september 2007 Del Skrevet 22. september 2007 Vanskelig å si når du ikke nevner hvilken av de linjene som er linje 58. Kan heller ikke si at jeg digger kodestilen din. Tenker da på <? echo $foo; ?> noe annet <? echo $hei; ?> Hvorfor ikke kjøre alt gjennom echo? Feks: <?php echo "<tr class='hei'>{$array[$i]['key']}</tr>"; ?> Lenke til kommentar
Haraldson Skrevet 22. september 2007 Del Skrevet 22. september 2007 Fordi det bare har vært pes før. Om du digger kodestilen eller ikke bryr jeg meg ikke så voldsomt mye om da jeg kun trenger en løsning som fungerer til i morra før deadline. Har kommet et hakk videre. Bytta ut linje 5 i koden over med PHP $aktorararr[] = explode(" ", $aktorar); // Deler opp til enkeltaktører Og linje 8; PHP foreach( $aktorararr as $aktor ) { Får nå følgende output: <tr class="aktor even"> <th scope="row">Knut Østermann;Navn Navnesen;;</th> <td><a href="Knut%20%C3%98stermann;Navn Navnesen;;" title="Knut Østermann;Navn Navnesen;;">Knut Østermann;Navn Navnesen;;</a></td> </tr> Hva gjenstår? Lenke til kommentar
Peter Skrevet 22. september 2007 Del Skrevet 22. september 2007 (endret) <?php $aktorar ="Egon Olsen;Arve Opsahl;http://imdb.com/profile/ArveOpsahl Kjell;Carsten Byhring;http://imdb.com/profile/CarstenByhring/"; $aktorararr = explode( "\n", $aktorar ); foreach( $aktorararr as $aktor ) { list( $rolle, $navn, $profil_link ) = explode( ';', trim( $aktor ) ); echo '<a href="'.$profil_link.'" title="'.$navn.'">'.$navn.'</a> i rollen som '.$rolle."<br />\n"; } ?> Endret 22. september 2007 av Nazgul Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå