আমি নিজেকে এমন এক অনন্য পরিস্থিতিতে পেয়েছি যেখানে instanceof
ব্যবহার করা যায় না (বিশেষত নাম স্পিডের বৈশিষ্ট্য) এবং আমার পক্ষে খুব দক্ষতার সাথে সংক্ষিপ্ত নামটির প্রয়োজন ছিল তাই আমি আমার নিজের একটি সামান্য বেঞ্চমার্ক করেছি। এটি এই প্রশ্নের উত্তর থেকে সমস্ত বিভিন্ন পদ্ধতি এবং তারতম্য অন্তর্ভুক্ত।
$bench = new \xori\Benchmark(1000, 1000); # https://github.com/Xorifelse/php-benchmark-closure
$shell = new \my\fancy\namespace\classname(); # Just an empty class named `classname` defined in the `\my\fancy\namespace\` namespace
$bench->register('strrpos', (function(){
return substr(static::class, strrpos(static::class, '\\') + 1);
})->bindTo($shell));
$bench->register('safe strrpos', (function(){
return substr(static::class, ($p = strrpos(static::class, '\\')) !== false ? $p + 1 : 0);
})->bindTo($shell));
$bench->register('strrchr', (function(){
return substr(strrchr(static::class, '\\'), 1);
})->bindTo($shell));
$bench->register('reflection', (function(){
return (new \ReflectionClass($this))->getShortName();
})->bindTo($shell));
$bench->register('reflection 2', (function($obj){
return $obj->getShortName();
})->bindTo($shell), new \ReflectionClass($shell));
$bench->register('basename', (function(){
return basename(str_replace('\\', '/', static::class));
})->bindTo($shell));
$bench->register('explode', (function(){
$e = explode("\\", static::class);
return end($e);
})->bindTo($shell));
$bench->register('slice', (function(){
return join('',array_slice(explode('\\', static::class), -1));
})->bindTo($shell));
print_r($bench->start());
পুরো ফলাফলের একটি তালিকা এখানে রয়েছে তবে এখানে হাইলাইটগুলি রয়েছে:
- আপনি যদি যাইহোক প্রতিবিম্ব ব্যবহার করতে যাচ্ছেন তবে ব্যবহার করা
$obj->getShortName()
হ'ল দ্রুততম পদ্ধতি ; শুধুমাত্র প্রতিবিম্ব ব্যবহার করে সংক্ষিপ্ত নাম পাওয়ার জন্য করে এটি প্রায় ধীরতম পদ্ধতি।
'strrpos'
যদি কোনও অজানা নামস্থানে না থাকে তবে ভুল মানটি ফিরিয়ে দিতে পারে তবে 'safe strrpos'
সামান্য ধীর হলেও আমি বলব যে এটিই বিজয়ী।
'basename'
লিনাক্স এবং উইন্ডোজের মধ্যে সামঞ্জস্যপূর্ণ করতে আপনাকে ব্যবহার করতে হবে str_replace()
যা এই পদ্ধতিটিকে তাদের সবচেয়ে ধীর করে তোলে।
ফলাফলের সরলীকৃত ছক, গতি সবচেয়ে ধীর পদ্ধতির তুলনায় পরিমাপ করা হয়:
+-----------------+--------+
| registered name | speed |
+-----------------+--------+
| reflection 2 | 70.75% |
| strrpos | 60.38% |
| safe strrpos | 57.69% |
| strrchr | 54.88% |
| explode | 46.60% |
| slice | 37.02% |
| reflection | 16.75% |
| basename | 0.00% |
+-----------------+--------+