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.