webForumDet fria alternativet

Textsträng skrivs ut som 0!?!?!

PHP

5 svar · 313 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Jag låter PHP skriva ut en helt vanlig HTML-form. Allt blir som man kan vänta sig fram till slutklämmen... vill säga...

källa skrev:

....
<tr><td id="wordBoxPos5">-</td>
<td><input type="text" id="wordBoxWord5" onFocus="markWord(5)" disabled>
<input type="button" class="buttonColorG" id="wordBoxAddButton5"
onclick="addWord(this.form, 5)" value="Add!" disabled>
<input type="button" class="buttonColorG" id="wordBoxClrButton5"
onclick="clearWord(this.form, 5)" value="Clear!" disabled>
<input type="hidden" id="wordBoxID5" value="">
</td>
</tr>0</div>

Motsvarande PHP-kod:

   for ($ix = 0; $ix < 6; $ix++) {
      echo '   <tr><td id="wordBoxPos'.$ix.'">-</td>
       <td><input type="text" id="wordBoxWord'.$ix.'" onFocus="markWord('.$ix.')" disabled>
           <input type="button" class="buttonColorG" id="wordBoxAddButton'.$ix.'"
                  onclick="addWord(this.form, '.$ix.')" value="Add!" disabled>
           <input type="button" class="buttonColorG" id="wordBoxClrButton'.$ix.'"
                  onclick="clearWord(this.form, '.$ix.')" value="Clear!" disabled>
           <input type="hidden" id="wordBoxID'.$ix.'" value="">
       </td>
   </tr>';
   } //Om jag avkommenterar echot nedan försvinner nollan!
   echo '<!-- Holds the ID for the currently marked word. If no word is marked it has the value '-'. -->
           <input type="hidden" id="currentWordID" value="-">
       </td>
   </tr>
</table>
</form></P>';

echo '</div>';

Vad i? Hur kan den strängen generera 0? Och vart tar strängen vägen? :q :x

Medlem sedan mars 20034 471 inlägg
#2

aasah skrev:

echo '<!-- Holds the ID for the currently marked word. If no word is 
                  marked it has the value '-'. -->...';

Hrm.... Fattar fortfarande inte varför det blir noll, men felet är här. '-' avslutar ju strängen! :r (Löses med \'-\'.)

Medlem sedan juni 20001 251 inlägg
#3

[r] Du hann tydligen före.

Medlem sedan aug. 20002 975 inlägg
#4

aasah skrev:

Hrm.... Fattar fortfarande inte varför det blir noll, ...

Anledningen till att du fick noll är samma som varför du får noll på det här:

echo 'A' - 'B';

Du kan inte substrahera bokstäver, så PHP typomvandlar, och värdet på strängarna blir då 0 (noll).

Medlem sedan mars 20034 471 inlägg
#5

Matte skrev:

Anledningen till att du fick noll är samma som varför du får noll på det här:

echo 'A' - 'B';

Du kan inte substrahera bokstäver, så PHP typomvandlar, och värdet på strängarna blir då 0 (noll).

Jag funderade på det... men hur kan det stämma? :q Om man vill utföra ett boolskt test så är ju false, 0, '' och "" samma värde. Medan varje annan sträng är true. Borde inte det betyda att en icke-tom sträng konverteras till någon siffra != 0? Eller kan det vara så att vilken annan sträng som helst blir 1, så man får 1-1 som är 0? :q

Medlem sedan aug. 20002 975 inlägg
#6

Testa att köra intval() eller floatval() på en sträng, så ser du vad typomvandlingen kan tänkas ge.
Visserligen ger det inte alltid samma i uttrycket som t.ex. intval skulle ge (beroende på strängen), men det ger dig en idé om vad som händer.
Typomvandling till numeriskt värde ger inte riktigt samma sak som typomvandling till booleanskt värde.

259 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)