PHP kodu UTF8 karakterleri kullanarak method_exists vs tutarsız get_class_methods

2 Cevap php

Aradım bir UTF-8 kodlu dosyada bu dersim var EnUTF8.Class.php:

class EnUTF8 {

    public function ñññ() {

        return 'ñññ()';

    }
}

ve başka bir UTF-8 kodlu dosyada:

require_once('EnUTF8.Class.php');
require_once('OneBuggy.Class.php');

$utf8 = new EnUTF8();
//$buggy = new OneBuggy();

echo (method_exists($utf8, 'ñññ')) ? 'ñññ() exists!' : 'ñññ() does not exist...';

echo "\n\n----------------------------------\n\n"

print_r(get_class_methods($utf8));

echo "\n----------------------------------\n\n"

echo $utf8->ñññ();

Bu beklenen bir sonuç üretir:

ñññ() exists!

----------------------------------

Array
(
    [0] => ñññ
)

----------------------------------

ñññ()

ama eğer ...

require_once('EnUTF8.Class.php');
require_once('OneBuggy.Class.php');

$utf8 = new EnUTF8();
$buggy = new OneBuggy();

echo (method_exists($utf8, 'ñññ')) ? 'ñññ() exists!' : 'ñññ() does not exist...';

echo "\n\n----------------------------------\n\n"

print_r(get_class_methods($utf8));

echo "\n----------------------------------\n\n"

echo $utf8->ñññ();

sonra garabeti görünüyor!:

ñññ() does not exist!

----------------------------------

Array
(
[0] => ñññ
)

----------------------------------

Fatal error: Call to undefined method EnUTF8::ñññ() in /var/www/test.php on line 16

Eh, şey, OneBuggy.Class.php UTF-8 çok kodlanmış ve EnUTF8.Class.php böylece hisseler absolutly şey olduğunu ...

nerede hata nedir?

UPDATED:

Peki, uzun bir hata ayıklama süre sonra OneBuggy.Class.php yapıcısı bunu buldum:

setlocale (LC_ALL, "es_ES@euro", "es_ES", "esp");

ben yaptım ...

//setlocale (LC_ALL, "es_ES@euro", "es_ES", "esp");

ve şimdi çalışıyor ama neden?.

2 Cevap

Bazı durumlarda, bazı karakterler için, bu iş olacak, ancak bir genel durum: PHP 5.x ile çalışıyorsanız, sizin değişkenler / sınıfları / işlevleri / ... için UTF-8 adlarını kullanarak geliştirmek gerekir böyle olmaz.

Ve bu tanımlayıcılar için doğrudur unutmayın, ama mesela, değişkenlerin içeriği için aynı sorun var olacak - bir örnek olarak, UTF-8 dizeleri işlemek için, size [(0)] {ile çalışmak zorunda fonksiyonların} familly.


This is because PHP 5.x is not really using Unicode : it's the big thing that's planned for PHP 6 (which is not even in alpha stage yet).