2012-04-11 2 views
0

Мы закодированы две функции проверки, один как ниже (он получает все поля сразу):

function check_fields(&$arr,&$msg,$types,$lens,$captions,$requireds) {} 

и другая функция является то, что, как показано ниже:

function is_valid($field=NULL,$type=0 ,$length=0,$required=true) {} 

Первая функция имеет несколько строк кода и значительно сокращает количество строк кода (около 30-35 строк или даже больше), с другой стороны вторая функция без ссылки увеличивает линии кода (около 30-35 строк или даже больше).

Мы должны вызвать вторую функцию для каждого поля, которое мы хотим проверить, но первая функция (check_fields) - это наоборот. Я давно читал в статье, что функции с исходными параметрами плохи с точки зрения производительности.

Теперь мы не знаем, какую функцию использовать. Какой из них лучше с точки зрения производительности?

ответ

1

Ну, я думаю, что я получил мой ответ сам после того как некоторые веб-поиска:

Do not use PHP references

+1

все работает для вас.Если вы хотите следовать правильному OO, тогда создайте класс и передайте экземпляр этого класса вместо полудюжины параметров. Объекты передаются ref в php5, поэтому вы можете изменить его по мере необходимости. Используйте typecasting для обеспечения правильного класса. На мой взгляд, вы концентрируетесь на неправильных вещах .... если вы хотите оптимизировать свой код, сконцентрируйтесь на вызовах базы данных и диске r/w. – Alex

1

используйте решение, которое проще в использовании и проще в обслуживании. Вы говорите о микро-оптимизации, которая в значительной степени бесполезна.


используйте ссылки, потому что в вашем случае это более простое решение и требует меньше кода.

+0

Специально, когда он получает код на менее читаемый уровень, только для достижения микро оптимизации! –

+0

Это не мой ответ, я действительно хочу знать, какой из них лучше, и почему, пожалуйста, не говорите что-то вроде этого в качестве ответа. – ALH

+0

см. Обновленное сообщение. – Alex

0

Вы только помните, когда вы назвали:

<?php 
    $a = 1 ; 
    echo "As initial, the real 'a' is..".$a."<br/>"; 
    $b = &$a ; // it's meaning $b has the same value as $a, $b = $a AND SO $a = $b (must be) 
    $b += 5; 
    echo "b is equal to: ".$b." and a equal to: ".$a."<br/>"; 
    echo " Now we back as initial, when a=1... (see the source code) <br/>"; 
    $a = 1 ; 
    echo "After we back : b is equal to: ".$b." and a equal to: ".$a."<br/>"; 
    echo "Wait, why b must follow a? ... <br/> ..what about if we change b alone? (see the source code)<br/>"; 
    $b = 23; 
    echo "After we change b alone, b equal to: ".$b." and a equal to: ".$a."<br/>"; 
    echo " WHAT ?? a ALSO CHANGED ?? a and b STICK TOGETHER?!! </br>" ; 
    echo "to 'clear this, we use 'unset' function on a (see the source code)<br/> "; 
    unset($a); 
    $b = 66; 
    $a = 1; 
    echo "Now, after unset,b is equal to: ".$b." and a equal to: ".$a."<br/>"; 
    ?> 

И выход будет:

As initial, the real 'a' is..1 
After the Reference operator...(see the source code) 
b is equal to: 11 and a equal to: 11 
Now we back as initial... (see the source code) 
After we back : b is equal to: 1 and a equal to: 1 
Wait, why b must follow a? ... 
..what about if we change b alone? (see the source code) 
After we change b alone, b equal to: 23 and a equal to: 23 
WHAT ?? a ALSO CHANGED ?? a and b STICK TOGETHER?!! 
to 'clear this, we use 'unset' function on a (see the source code) 
Now, after unset,b is equal to: 66 and a equal to: 1 

Отзыв:

Почему $a изменение? Это потому, что & (оператор амперсанда) сделал & в качестве эталонной переменной, поэтому он хранился во временной памяти. Когда вы интериализовали $b= &$a, см. Мой комментарий $b = $a, а также$a = $b, это означает, что всякий раз, когда вы меняли $b, $a также было изменено, и наоборот. Они прикованы! Это простой смысл ссылочного оператора.

Может быть, в начале он чувствует себя странно, но как только вы станете экспертом с этим, вы можете справиться с этим оператором, чтобы сделать функцию «переключения», как это:

<?php 

function bulbswitch(&$switch) 
{ 
    $switch = !$switch;  

} 

function lightbulb($a) 
{ 
    if ($a == true) { echo 'a is On <br/>';} 
    else { echo 'a is Off <br/>';} 
} 

$a = true ; 
echo 'At the begining, a is On, then.... <br/>'; 

bulbswitch($a); 
lightbulb($a); 
bulbswitch($a); 
lightbulb($a); 
bulbswitch($a); 
lightbulb($a); 
bulbswitch($a); 
lightbulb($a); 
bulbswitch($a); 
lightbulb($a); 
bulbswitch($a); 
lightbulb($a); 
?> 

Выход будет:

At the begining, a is On, then.... 
a is Off 
a is On 
a is Off 
a is On 
a is Off 
a is On 
+0

Я попытался отредактировать это, но ваше редактирование отменяет мою ... вы должны * не * отступы нормального текста, или все будет отображаться как код. –

+0

Спасибо, но теперь я исправил это. Видишь? –

+0

Ну, все еще в кодовом блоке, поэтому нет;) –

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