PHP - extract () tipi

3 Cevap php

PHP'nin extract() function can take on one of several extract_types. Ama extr_prefix_same ve extr_prefix_if_exists arasındaki fark nedir? Manuel değişken adı zaten varsa durumda birinde, yeni değişkenler öneki olacak gibi ses yapar.

Teşekkürler!

3 Cevap

EXTR_PREFIX_IF_EXISTS kullanırken değişken zaten o yoksa, öneki versiyonu da yaratılmış olmayacaktır. Bu örnekte:

function test() {
    $a = 12345;

    extract(array('a' => 1, 'b' => 2, 'c' => 3), EXTR_PREFIX_IF_EXISTS, 'my_');

    var_export(get_defined_vars());
}
test();

$my_b ve $my_c oluşturulmaz $b ve $c yok, çünkü.

EXTR_PREFIX_SAME all değişkenleri ayıklamak olacak ve mevcut kapsamında var sadece önek olanlardır.

EXTR_PREFIX_IF_EXISTS only geçerli kapsamda mevcut değişkenleri ayıklamak ve istenen öneki ile onları önek.

Bu nedenle, örneğin:

$foo = 'foo';
$bar = 'bar';

extract(array('foo' => 'moo', 'bar' => 'mar', 'baz' => 'maz'), EXTR_PREFIX_IF_EXISTS, 'prefix');

isset($prefix_foo); // true
isset($prefix_baz); // false
isset($baz); // false

Iken ....

$foo = 'foo';
$bar = 'bar';

extract(array('foo' => 'moo', 'bar' => 'mar', 'baz' => 'maz'), EXTR_PREFIX_SAME, 'prefix');

isset($prefix_foo); // true
isset($prefix_baz); // false
isset($baz); // true

Manuel tanımlarına dayalı, EXTR_PREFIX_SAME tuşuna adına göre değişkenleri yaratacak ve yerel uzayda bir değişken zaten varsa, bir önek değişken adı eklenecektir.

Buna karşılık, EXTR_PREFIX_IF_EXISTS EXTR_IF_EXISTS (değişkenler zaten varsa sadece yaz) davranışını miras için görünür, ancak bunun yerine yerel değişkenleri yazılmadan, bir öneki sürüm oluşturulur.

Aşağıdaki düşünün

$array = Array();
$array['foo'] = 'foo';
$array['bar'] = 'bar';
$array['baz'] = 'baz';	

$foo = 'local foo';
$bar = 'local bar';

extract($array, EXTR_PREFIX_SAME, 'pre');

print_r(get_defined_vars());

//partial output	
//Array
//(
//	[array] => Array
//		(
//			[foo] => foo
//			[bar] => bar
//			[baz] => baz
//		)
//
//	[foo] => local foo
//	[bar] => local bar
//	[pre_foo] => foo
//	[pre_bar] => bar
//	[baz] => baz
//)

Yani EXTR_PREFIX_SAME ile, $ foo ve $ bar değerleri aynı kalır, ve üç yeni yerel değişkenler ($ pre_foo, $ pre_bar ve $ baz) tanımlanacaktır. Ancak biz kullanırsanız EXTR_PREFIX_IF_EXISTS

$array = Array();
$array['foo'] = 'foo';
$array['bar'] = 'bar';
$array['baz'] = 'baz';	

$foo = 'local foo';
$bar = 'local bar';

extract($array, EXTR_PREFIX_IF_EXISTS, 'pre');

print_r(get_defined_vars());

//partial output	
//Array
//(
//	[array] => Array
//		(
//			[foo] => foo
//			[bar] => bar
//			[baz] => baz
//		)
//
//	[foo] => local foo
//	[bar] => local bar
//	[pre_foo] => foo
//	[pre_bar] => bar
//)

$ Foo ve $ bar değerleri hala korunur, ancak İKİ yeni değişkenler yerel uzaya ithal edilmektedir. $ Baz zaten var olan bir değişken olmadığı için EXTR_PREFIX_IF_EXISTS dizide 'Baz' tuşuna görmezden PHP söyler.