Gå til innhold

PHP·pub - Programming With Attitude - and beer


Anbefalte innlegg

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
Videoannonse
Annonse
Huff, er det bare jeg som får frysninger av list() ? Ustandard og stygg syntaks  :no:

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 av dabear
Lenke til kommentar
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 av Haraldson
Lenke til kommentar
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
Ja, det gjør jeg. Er jo bare å ikke endre de, det :hmm:
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
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
Ja, det gjør jeg. Er jo bare å ikke endre de, det :hmm:
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? :hmm:

Lenke til kommentar
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 :D

Lenke til kommentar
Gjest Slettet+6132
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
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$keytrue);

$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? :hmm:

Lenke til kommentar

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
<?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 av Nazgul
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...