-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathnumeric-strings.xml
152 lines (143 loc) · 5.39 KB
/
numeric-strings.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 7ba2406e555a240338d63f72d9ac54a46e0bee5d Maintainer: nilgun Status: ready -->
<sect1 xml:id="language.types.numeric-strings" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Sayısal Dizeler</title>
<para>
Bir PHP dizesi, <type>int</type> veya <type>float</type> olarak
yorumlanabiliyorsa sayısal kabul edilir.
</para>
<para>
Resmi olarak PHP 8.0.0'dan itibaren:
</para>
<informalexample>
<programlisting>
<![CDATA[
WHITESPACES \s*
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
INT_NUM_STRING {WHITESPACES} [+-]? {LNUM} {WHITESPACES}
FLOAT_NUM_STRING {WHITESPACES} [+-]? ({DNUM} | {EXPONENT_DNUM}) {WHITESPACES}
NUM_STRING ({INT_NUM_STRING} | {FLOAT_NUM_STRING})
]]>
</programlisting>
</informalexample>
<para>
PHP ayrıca <emphasis>öncü</emphasis> sayısal dizeler kavramına sahiptir. Bu,
sayısal bir dizge gibi başlayan ve ardından herhangi bir karakter gelen bir
dizedir.
</para>
<note>
<para>
Sayılarla sınırlanmış (harfe büyüklüğüne duyarsız) <literal>E</literal>
harfini içeren herhangi bir dizge, bilimsel gösterimiyle ifade edilen bir
sayı olarak görülecektir. Bu beklenmedik sonuçlar doğurabilir.
<programlisting role="php">
<![CDATA[
<?php
var_dump("0D1" == "000"); // yanlış, "0D1" bilimsel gösterim değil
var_dump("0E1" == "000"); // doğru, "0E1" => 0 * (10 ^ 1), yani 0
var_dump("2E1" == "020"); // doğru, "2E1" => 2 * (10 ^ 1), yani 20
?>
]]>
</programlisting>
</para>
</note>
<sect2 xml:id="language.types.numeric-string.conversion">
<title>Sayısal bağlamlarda kullanılan dizeler</title>
<para>
Bir dizenin sayı olarak değerlendirilmesi gerektiğinde (örneğin, aritmetik
işlemler, <type>int</type> tür bildirimi, vb.), Sonucu belirlemek için
aşağıdaki adımlar atılır:
<orderedlist>
<listitem>
<simpara>
Dize sayısal ise, (<constant>PHP_INT_MAX</constant> tarafından
tanımlandığı gibi) <type>int</type> türü sınırlarına uyuyorsa ve
dize bir tamsayı sayısal dizeyse, <type>int</type> olarak çözümlenir,
aksi takdirde bir <type>float</type> olarak çözümlenir.
</simpara>
</listitem>
<listitem>
<simpara>
Bağlam, öncü sayısal dizelere izin veriyorsa ve dize tek ise,
(<constant>PHP_INT_MAX</constant> tarafından tanımlandığı gibi)
<type>int</type> türü sınırlarına uyuyorsa ve dizenin baştaki bölümü
bir tamsayı sayısal dizeyse, <type>int</type> olarak çözümlenir,
aksi takdirde bir <type>float</type> olarak çözümlenir. Ek olarak
<constant>E_WARNING</constant> seviyesinde bir hata ortaya çıkar.
</simpara>
</listitem>
<listitem>
<simpara>
Dize sayısal değilse, bir <classname>TypeError</classname> yavrulanır.
</simpara>
</listitem>
</orderedlist>
</para>
</sect2>
<sect2 xml:id="language.types.numeric-string.prior">
<title>PHP 8.0.0 öncesindeki davranış</title>
<para>
PHP 8.0.0 öncesinde, bir dize yalnızca, <emphasis>önünde</emphasis> beyaz
boşluklar varsa sayısal, <emphasis>sonunda</emphasis> beyaz boşluklar varsa
öncü sayısal dize olduğu kabul edilirdi.
</para>
<para>
PHP 8.0.0 öncesinde, bir dize sayısal bir bağlamda kullanıldığında,
yukarıdaki adımlar aşağıdaki farklılıklarla uygulanırdı:
<itemizedlist>
<listitem>
<simpara>
Öncü sayısal dize kullanımı <constant>E_WARNING</constant> yerine
<constant>E_NOTICE</constant> seviyesinde bir hataya sebep olurdu.
</simpara>
</listitem>
<listitem>
<simpara>
Dize sayısal değilse, <constant>E_WARNING</constant> seviyesinde
bir hata ortaya çıkar ve değer olarak <literal>0</literal> dönerdi.
</simpara>
</listitem>
</itemizedlist>
PHP 7.1.0 öncesinde, ne <constant>E_NOTICE</constant>
ne de <constant>E_WARNING</constant> seviyesinde bir hata ortaya çıkardı.
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$foo = 1 + "10.5"; // $foo bir float (11.5)
$foo = 1 + "-1.3e3"; // $foo bir float (-1299)
$foo = 1 + "bob-1.3e3"; // PHP 8.0.0 sonrasında TypeError, öncesinde int (1)
$foo = 1 + "bob3"; // PHP 8.0.0 sonrasında TypeError, öncesinde int (1)
$foo = 1 + "10 Small Pigs"; // $foo bir int (11) ve PHP 8.0.0 sonrasında E_WARNING, öncesinde E_NOTICE
$foo = 4 + "10.2 Little Piggies"; // $foo bir float (14.2) ve PHP 8.0.0 sonrasında E_WARNING, öncesinde E_NOTICE
$foo = "10.0 pigs " + 1; // $foo bir float (11) ve PHP 8.0.0 sonrasında E_WARNING, öncesinde E_NOTICE
$foo = "10.0 pigs " + 1.0; // $foo bir float (11) ve PHP 8.0.0 sonrasında E_WARNING, öncesinde E_NOTICE
?>
]]>
</programlisting>
</informalexample>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->