mirror of
https://github.com/php/doc-tr.git
synced 2026-03-23 23:02:09 +01:00
770 lines
19 KiB
XML
770 lines
19 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: f908fff129bcd8ec1605658e06457cb04e5b2b51 Maintainer: nilgun Status: ready -->
|
||
<sect1 xml:id="language.types.declarations">
|
||
<title>Tür bildirimleri</title>
|
||
|
||
<para>
|
||
Tür bildirimleri işlev bağımsız değişkenlerine, dönüş değerlerine ve
|
||
PHP 7.4.0 ve sonrasında sınıf özelliklerine eklenebilir. Çağrı sırasında
|
||
değerin belirtilen türde olmasını gerektirir, aksi takdirde
|
||
<classname>TypeError</classname> oluşur.
|
||
</para>
|
||
|
||
<para>
|
||
<type>resource</type> türü dışında PHP'nin desteklediği her tür, kullanıcı
|
||
bildirimi olarak kullanılabilir. Bu sayfa, farklı türlerin
|
||
kullanılabilirliğine ilişkin bir değişiklik günlüğü ve bunların tür
|
||
bildirimlerinde kullanımına ilişkin belgeleri içerir.
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Bir sınıf, bir arayüz yöntemini gerçeklediğinde veya bir üst sınıf
|
||
tarafından zaten tanımlanmış bir yöntemi yeniden gerçeklediğinde,
|
||
gerçeklediği tanımla uyumlu olması gerekir. Bir yöntem,
|
||
<link linkend="language.oop5.variance">özgüllük</link> kurallarına
|
||
uyuyorsa uyumludur.
|
||
</para>
|
||
</note>
|
||
|
||
<sect2 role="changelog">
|
||
&reftitle.changelog;
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>8.3.0</entry>
|
||
<entry>
|
||
Sınıf, arayüz, nitelik ve sayılama sabit türleri için destek eklendi.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.2.0</entry>
|
||
<entry>
|
||
<acronym>DNF</acronym> türleri desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.2.0</entry>
|
||
<entry>
|
||
<type>true</type> kendisi tür olanlardan biri olarak eklendi.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.2.0</entry>
|
||
<entry>
|
||
<type>null</type> ve <type>false</type> tek başlarına kullanılabilir oldu.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.1.0</entry>
|
||
<entry>
|
||
Kesişim türleri desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.1.0</entry>
|
||
<entry>
|
||
<type>void</type> dönüş türünde bir işlevden dönen değere başvuru
|
||
artık önerilmiyor.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.1.0</entry>
|
||
<entry>
|
||
<type>never</type> dönüş türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.0.0</entry>
|
||
<entry>
|
||
<type>mixed</type> türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.0.0</entry>
|
||
<entry>
|
||
<type>static</type> dönüş türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>8.0.0</entry>
|
||
<entry>
|
||
Birleşik türler desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.4.0</entry>
|
||
<entry>
|
||
Sınıf özellik türü bildirim desteği eklendi.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.2.0</entry>
|
||
<entry>
|
||
<type>object</type> türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.1.0</entry>
|
||
<entry>
|
||
<type>iterable</type> türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.1.0</entry>
|
||
<entry>
|
||
<type>void</type> türü desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry>7.1.0</entry>
|
||
<entry>
|
||
Null olabilen türler desteklenmeye başlandı.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.declarations.base">
|
||
<title>Temel türlerle ilgili kullanım bilgileri</title>
|
||
|
||
<simpara>
|
||
Temel türler, bu bölümde açıklanan bazı küçük yetersizlikler dışında
|
||
basit şekilde davranır.
|
||
</simpara>
|
||
|
||
<sect3 xml:id="language.types.declarations.base.scalar">
|
||
<title>Sayıl türler</title>
|
||
<warning>
|
||
<para>
|
||
Sayıl türler (<type>bool</type>, <type>int</type>, <type>float</type>,
|
||
<type>string</type>) için takma adlar desteklenmemekte, bunlar bir sınıf
|
||
veya arayüz adı olarak ele alınmaktadır. Örneğin, tür bildirimi olarak
|
||
<literal>boolean</literal>, değerin <type>bool</type> türünden ziyade
|
||
<literal>boolean</literal> isimli sınıfın veya arayüzün bir örneği
|
||
olmasını gerektirir:
|
||
</para>
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function test(boolean $param) {}
|
||
test(true);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.8;
|
||
<screen>
|
||
<![CDATA[
|
||
Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in /in/9YrUX on line 2
|
||
Fatal error: Uncaught TypeError: test(): Argument #1 ($param) must be of type boolean, bool given, called in - on line 3 and defined in -:2
|
||
Stack trace:
|
||
#0 -(3): test(true)
|
||
#1 {main}
|
||
thrown in - on line 2
|
||
]]>
|
||
</screen>
|
||
</informalexample>
|
||
</warning>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.declarations.void">
|
||
<title>void</title>
|
||
<note>
|
||
<para>
|
||
<type>void</type> dönüş türünde bir işlevden dönen değere başvuru
|
||
çelişki sebebiyle PHP 8.1.0 ve sonrasında önerilmemektedir. Evvelce
|
||
böyle bir çağrı şöyle bir <constant>E_NOTICE</constant> çıktılıyordu:
|
||
<computeroutput>Only variable references should be returned by reference</computeroutput>
|
||
(Yalnızca değişkene atıflar atıf olarak döndürülebilir).
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function &test(): void {}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
</note>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.declarations.base.function">
|
||
<title>Çağrılabilir türler</title>
|
||
<para>
|
||
Bu türler sınıf özelliği türü olarak kullanılamaz.
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
İşlev bildirimi olarak belirtilemez.
|
||
</simpara>
|
||
</note>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.declarations.references">
|
||
<title>Atıf olarak aktarılan bağımsız değişkenlerde tür bildirimi</title>
|
||
|
||
<simpara>
|
||
Atıf olarak aktarılan bir bağımsız değişkende tür bildirimi yapılmışsa
|
||
değişkenin türü işlev dönerken değil, <emphasis>yalnızca</emphasis>
|
||
çağrının başında işlev girdisi olarak sınanır. Yani işlev atıf yapılan
|
||
değişkenin türünü değiştirebilir.
|
||
</simpara>
|
||
<example>
|
||
<title>- Atıf olarak aktarılan tür bildirimli bağımsız değişkenler</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function array_baz(array &$param)
|
||
{
|
||
$param = 1;
|
||
}
|
||
$var = [];
|
||
array_baz($var);
|
||
var_dump($var);
|
||
array_baz($var);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.similar;
|
||
<screen>
|
||
<![CDATA[
|
||
int(1)
|
||
Fatal error: Uncaught TypeError: array_baz(): Argument #1 ($param) must be of type array, int given, called in - on line 9 and defined in -:2
|
||
Stack trace:
|
||
#0 -(9): array_baz(1)
|
||
#1 {main}
|
||
thrown in - on line 2
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.declarations.composite">
|
||
<title>Birleşik türlerle ilgili kullanım bilgileri</title>
|
||
<para>
|
||
Birleşik tür bildirimleri ile ilgili birkaç kısıtlama vardır ve basit
|
||
hataları önlemek için derleme sırasında gereksiz fazlalık denetimi
|
||
yapılır.
|
||
</para>
|
||
|
||
<caution>
|
||
<simpara>
|
||
PHP 8.2.0 öncesinde ve <acronym>DNF</acronym> türler desteklenmeye
|
||
başlandığında kesişim türlerini bileşik türlerle birleştirmek mümkün
|
||
değildi.
|
||
</simpara>
|
||
</caution>
|
||
|
||
<sect3 xml:id="language.types.declarations.composite.union">
|
||
<title>Bileşik türler</title>
|
||
<warning>
|
||
<simpara>
|
||
&false; ve &true; tekil türlerini aynı bileşik tür altında bildirmek
|
||
mümkün değildir. Bunun yerine <type>bool</type> kullanılabilir.
|
||
</simpara>
|
||
</warning>
|
||
|
||
<caution>
|
||
<simpara>
|
||
PHP 8.2.0 öncesinde, &false; ve <type>null</type>
|
||
tek başlarına kullanılamadığından yalnızca bu türlerden ibaret bir
|
||
bileşik türe izin verilmezdi. İzin verilmeyen tür bildirimleri:
|
||
&false;, <literal>false|null</literal> ve
|
||
<literal>?false</literal>.
|
||
</simpara>
|
||
</caution>
|
||
|
||
<sect4 xml:id="language.types.declarations.nullable">
|
||
<title>Null olabilen türde sözdizimsel nane</title>
|
||
|
||
<para>
|
||
Temel tür bildirimlerinden yalnızca biri, türün önüne bir soru imi
|
||
(<literal>?</literal>) konularak null olabilir olarak imlenebilir.
|
||
Bu bakımdan <literal>?T</literal> ve <literal>T|null</literal> aynıdır.
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
Bu sözdizimi PHP 7.1.0 ve sonrasında desteklenmekte olup
|
||
genelleştirilmiş bileşik tür desteğinden önce desteklenmekteydi.
|
||
</simpara>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
<literal>null</literal> öntanımlı değer yapılarak null olabilir
|
||
bağımsız değişkenler elde etmek de mümkündür. Bir alt sınıfta öntanımlı
|
||
değer değiştirilirse, tür bildirimine <type>null</type> türün
|
||
eklenmesini gerektireceğinden ve dolayısıyla tür uyumluluğunu
|
||
bozacağından bu önerilmez.
|
||
</para>
|
||
<example>
|
||
<title>- Bağımsız değişkenlerin null olabilmesinin eski yolu</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class C {}
|
||
function f(C $c = null) {
|
||
var_dump($c);
|
||
}
|
||
f(new C);
|
||
f(null);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
object(C)#1 (0) {
|
||
}
|
||
NULL
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
</note>
|
||
</sect4>
|
||
</sect3>
|
||
|
||
<sect3 xml:id="language.types.declarations.composite.redundant">
|
||
<title>Yinelenen ve gereksiz türler</title>
|
||
<para>
|
||
Birleşik tür bildirimlerindeki basit hataları yakalamak için, sınıf
|
||
yüklemeden algılanabilen gereksiz türler, derleme zamanı hatasına neden
|
||
olur. Bunlar:
|
||
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Adla çözümlenen her tür bir bildirimde yalnızca bir kez var olabilir.
|
||
<literal>int|string|INT</literal> ve
|
||
<literal>Countable&Traversable&COUNTABLE</literal>
|
||
gibi türler hataya neden olur.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<type>mixed</type> kullanımı hataya yol açar.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>Birleşik türler için:</simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
<type>bool</type> türün yanına, <type>false</type> veya
|
||
<type>true</type> eklenemez.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<type>object</type> türün yanına, sınıf türleri eklenemez.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<type>iterable</type> türün yanına, <type>array</type>
|
||
ve <classname>Traversable</classname> eklenemez.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>Kesişim türleri için:</simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Sınıf türünde olmayan türlerin kullanımı hataya yol açar.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
<type>self</type>, <type>parent</type> veya
|
||
<type>static</type> kullanımı hataya yol açar.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara><acronym>DNF</acronym> türleri için:</simpara>
|
||
<itemizedlist>
|
||
<listitem>
|
||
<simpara>
|
||
Genel bir türün yanına kısıtlayıcı bir türü eklemek gereksizdir.
|
||
</simpara>
|
||
</listitem>
|
||
<listitem>
|
||
<simpara>
|
||
İki eşdeğer kesişim türü kullanımı.
|
||
</simpara>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</listitem>
|
||
</itemizedlist>
|
||
</para>
|
||
|
||
<note>
|
||
<simpara>
|
||
Bu, türün "en az" olasılığını garanti etmez çünkü bunu yapmak,
|
||
kullanılan tüm sınıf türlerinin yüklenmesini gerektirir.
|
||
</simpara>
|
||
</note>
|
||
|
||
<para>
|
||
Örneğin, <literal>A</literal> ve <literal>B</literal> sınıf takma
|
||
adlarıysa, <literal>A or B</literal>'ye indirgenebilse bile
|
||
<literal>A|B</literal> uygun bir bileşik tür olarak kalır.
|
||
Benzer şekilde, <code>B extends A {}</code> ise, yalnızca A'ya
|
||
indirgenebilse bile <literal>A|B</literal> uygun bir bileşik türdür.
|
||
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function foo(): int|INT {} // izin verilmez
|
||
function foo(): bool|false {} // izin verilmez
|
||
function foo(): int&Traversable {} // izin verilmez
|
||
function foo(): self&Traversable {} // izin verilmez
|
||
use A as B;
|
||
function foo(): A|B {} // izin verilmez ("use" ad çözünürlüğünün parçasıdır)
|
||
function foo(): A&B {} // izin verilmez ("use" ad çözünürlüğünün parçasıdır)
|
||
class_alias('X', 'Y');
|
||
function foo(): X|Y {} // izin verilir (gereksizlik yalnızca çalışma anında saptanabilir)
|
||
function foo(): X&Y {} // izin verilir (gereksizlik yalnızca çalışma anında saptanabilir)
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
</sect3>
|
||
</sect2>
|
||
|
||
<sect2 xml:id="language.types.declarations.examples">
|
||
&reftitle.examples;
|
||
<example>
|
||
<title>- Temel sınıf türü bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class C {}
|
||
class D extends C {}
|
||
// C'yi genişletmiyor.
|
||
class E {}
|
||
function f(C $c) {
|
||
echo get_class($c)."\n";
|
||
}
|
||
f(new C);
|
||
f(new D);
|
||
f(new E);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.8;
|
||
<screen>
|
||
<![CDATA[
|
||
C
|
||
D
|
||
Fatal error: Uncaught TypeError: f(): Argument #1 ($c) must be of type C, E given, called in /in/gLonb on line 14 and defined in /in/gLonb:8
|
||
Stack trace:
|
||
#0 -(14): f(Object(E))
|
||
#1 {main}
|
||
thrown in - on line 8
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Temel arayüz türü bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
interface I { public function f(); }
|
||
class C implements I { public function f() {} }
|
||
// I'yi gerçeklemiyor.
|
||
class E {}
|
||
function f(I $i) {
|
||
echo get_class($i)."\n";
|
||
}
|
||
f(new C);
|
||
f(new E);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.8;
|
||
<screen>
|
||
<![CDATA[
|
||
C
|
||
Fatal error: Uncaught TypeError: f(): Argument #1 ($i) must be of type I, E given, called in - on line 13 and defined in -:8
|
||
Stack trace:
|
||
#0 -(13): f(Object(E))
|
||
#1 {main}
|
||
thrown in - on line 8
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Temel dönüş türü bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function sum($a, $b): float {
|
||
return $a + $b;
|
||
}
|
||
// dikkat: float dönecek
|
||
var_dump(sum(1, 2));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
float(3)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Bir nesne döndürmek</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class C {}
|
||
function getC(): C {
|
||
return new C;
|
||
}
|
||
var_dump(getC());
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
object(C)#1 (0) {
|
||
}
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Null olabilen bağımsız değişken bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class C {}
|
||
function f(?C $c) {
|
||
var_dump($c);
|
||
}
|
||
f(new C);
|
||
f(null);
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
object(C)#1 (0) {
|
||
}
|
||
NULL
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Null olabilen dönüş türü bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function get_item(): ?string {
|
||
if (isset($_GET['item'])) {
|
||
return $_GET['item'];
|
||
} else {
|
||
return null;
|
||
}
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</sect2>
|
||
|
||
<!-- TODO Move this into its own declare page -->
|
||
<sect2 xml:id="language.types.declarations.strict">
|
||
<title>Katı kodlama</title>
|
||
|
||
<para>
|
||
PHP öntanımlı olarak, yanlış türdeki değerleri mümkün olduğunca beklenen
|
||
sayıl türe zorlar. Örneğin, bir dizge aktarılması gereken bir bağımsız
|
||
değişkene tamsayı bir değer aktarılırsa, işlev <type>int</type> değil
|
||
<type>string</type> türünde bir değişken alır.
|
||
</para>
|
||
|
||
<para>
|
||
Katı kipi her dosya için ayrı ayrı etkinleştirmek mümkündür. Katı kipte,
|
||
yalnızca tür bildirimine tam olarak karşılık gelen değer kabul edilir,
|
||
aksi takdirde bir <classname>TypeError</classname> oluşur. Bu kuralın tek
|
||
istisnası, <type>float</type> tür bildirimine rağmen <type>int</type>
|
||
türünde değer aktarmaktır.
|
||
</para>
|
||
|
||
<warning>
|
||
<simpara>
|
||
Dahili işlevler içinden yapılan işlev çağrıları,
|
||
<literal>strict_types</literal> bildiriminden etkilenmez.
|
||
</simpara>
|
||
</warning>
|
||
|
||
<para>
|
||
Katı kipi etkinleştirmek için, <literal>strict_types</literal> bildirimi
|
||
&declare; deyiminde kullanılır:
|
||
</para>
|
||
|
||
<note>
|
||
<para>
|
||
Katı kodlama, katı kodlamanın etkinleştirildiği dosya içindeki işlev
|
||
tanımlarına değil, işlev çağrılarına uygulanır. Katı kodlama etkin
|
||
olmayan bir dosyadan, katı kodlamanın etkinleştirildiği dosya içinde
|
||
tanımlanmış bir işleve çağrı yapılırsa, çağrıyı yapanın tercihine
|
||
(zorlayıcı kodlama) saygı gösterilecek ve değer zorlanacaktır.
|
||
</para>
|
||
</note>
|
||
|
||
<note>
|
||
<para>
|
||
Katı kodlama yalnızca sayıl tür bildirimleri için tanımlanmıştır.
|
||
</para>
|
||
</note>
|
||
|
||
<example>
|
||
<title>- Bağımsız değişken değerlerinde katı kodlama</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
declare(strict_types=1);
|
||
function sum(int $a, int $b) {
|
||
return $a + $b;
|
||
}
|
||
var_dump(sum(1, 2));
|
||
var_dump(sum(1.5, 2.5));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs.8;
|
||
<screen>
|
||
<![CDATA[
|
||
int(3)
|
||
Fatal error: Uncaught TypeError: sum(): Argument #1 ($a) must be of type int, float given, called in - on line 9 and defined in -:4
|
||
Stack trace:
|
||
#0 -(9): sum(1.5, 2.5)
|
||
#1 {main}
|
||
thrown in - on line 4
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Bağımsız değişken değerlerinde zorlayıcı kodlama</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
function sum(int $a, int $b) {
|
||
return $a + $b;
|
||
}
|
||
var_dump(sum(1, 2));
|
||
// Değerler tamsayıya zorlanır. Çıktıya dikkat!
|
||
var_dump(sum(1.5, 2.5));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
int(3)
|
||
int(3)
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
|
||
<example>
|
||
<title>- Dönüş değerlerinde katı kodlama</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
declare(strict_types=1);
|
||
function sum($a, $b): int {
|
||
return $a + $b;
|
||
}
|
||
var_dump(sum(1, 2));
|
||
var_dump(sum(1, 2.5));
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
&example.outputs;
|
||
<screen>
|
||
<![CDATA[
|
||
int(3)
|
||
Fatal error: Uncaught TypeError: sum(): Return value must be of type int, float returned in -:5
|
||
Stack trace:
|
||
#0 -(9): sum(1, 2.5)
|
||
#1 {main}
|
||
thrown in - on line 5
|
||
]]>
|
||
</screen>
|
||
</example>
|
||
<example>
|
||
<title>- Sınıf özellik türü bildirimi</title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
class User {
|
||
public static string $foo = 'foo';
|
||
|
||
public int $id;
|
||
public string $username;
|
||
|
||
public function __construct(int $id, string $username) {
|
||
$this->id = $id;
|
||
$this->username = $username;
|
||
}
|
||
}
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</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
|
||
-->
|