2013-11-11 3 views
0

Это было на мой взгляд, в течение нескольких дней, я иногда ловлю себя на необходимости использовать Манипуляции метод, который доступен для PHP: Type Juggling ManualCasttype эффективность

и возглавляемую в предмет эффективности/Correct методы .. для того, чтобы продемонстрировать подобный сценарий, который на мой взгляд, будет:

/* 
    The benchmark test: 
     Expected Output: string 
      Actual Output: string 
*/ 
$Percentile = "20%"; 
echo gettype($Percentile); 
?> 
<br><br> 
Force Casting to an Integer: 
<br><br> 
<?php 
    /* 
     Remove the %age from the string before force re-cast 
      Expected Output: integer 
      Actual Output: integer 
       Test Passed 
    */ 
    unset($Percentile); // Just to reduce any cached validations 
    $Percentile = "20%"; 
    $Percentile = (int)$Percentile; 
    echo $Percentile."\r\n"; 
    echo gettype($Percentile); 
?> 
<br><br> 
Str Replace to remove the '%' and cast to integer 
<br><br> 
<?php 
    /* 
     Remove the %age from the string before force re-cast 
      Expected Output: integer 
      Actual Output: integer 
       Test Passed 
    */ 
    unset($Percentile); 
    $Percentile = "20%"; 
    $Percentile_New = str_replace("%","",$Percentile); 
    echo $Percentile_New."\r\n"; // 
    echo gettype((int)$Percentile_New); 
?> 

После прочтения все тесты проходят с ожидаемыми результатами, но пытается заставить;

$Percentile = 20%; 

который возвращает ошибку:

Parse error: syntax error, unexpected ';'

Так eitherway, создавая проценты будут создаваться с использованием представления строки произнесения, но это не главная цель вопрос ..

Вопрос в том, какой способ более эффективен?

Метод 1:

силы приведение типа в целое с не вынимая% возраста

Способ 2:

использование str_replace затем заставить приведение типа в целое после удаления% возраста

Эффективность - это меньше места для неправильных типов передачи данных (если такая проблема может возникнуть)

+0

'$ Percentile = 0.2' определенно должен быть наиболее эффективным методом присвоения значения. – ComFreek

+1

Вы, кажется, используете странное определение «эффективный». Обычно это относится коад, который работает быстрее или использует меньше памяти. – Barmar

+0

@Barmar True, позволяет заменить эффективность для надежности –

ответ

0

Учитывая этот пример, он явно более эффективен, не выполняя никаких строковых операций, но напрямую используя тип cast. Результат для данной строки тот же.

Смежные вопросы