4 вопроса по функциям и операторам ПХП

metton

Guest
4 вопроса по функциям и операторам ПХП

1. Что делает второй аргумент функции ПХП intval() ?

2. Как работает оператор поразрядного отрицания? Как написано в книге, он меняет все разряды своего операнда на противоположный, включая знаковый разряд.
Например, 6 - это 110 в двоичной системе; меняем все разряды на противоположные: -001
А функция возвращает совсем другое: как и написано в книге, исходное число, умноженное на -1 с вычетом единицы...
Почему так - КАК оно всё же работает?..

3. Чем отличаются функции ПХП include() и require():
- в php3 ?
- в php4 ?
А также include_once() и require_once()?

4. Как в мою функцию - второй аргумент ф-ции array_walk() передать больше чем три аргумента?
И, кстати, чем отличаются понятия аргумент и параметр относительно к функциям? Я совсем запутался...

Спасибо!..
 

metton

Guest
С третьим вопросом разобрался.
Про остальные в мануале не нашёл...
Ответьте, плз!..
 

metton

Guest
И ещё один вопрос
Не даёт он, блин, мне покоя =))
Не уменьшает ли скорость использование двойных кавычех, (они же вроде парсятся, а одинарные - нет)?
 

si

Administrator
PHP:
<pre>
<?
for($i=0;$i<255;$i++){
	printf("% 3u | %s | %s | % 4d | % 4u \n",$i,int2bits($i),int2bits(~$i),~$i, ~$i);
}

function int2bits($i){
	$s = '';

	for($j=0;$j<32;$j++,$i = $i>>1 ){
		$s = (($i & 1)?'1':'0').$s;
	}

	return $s;
}
?>
</pre>
Output:
Код:
  0 | 00000000000000000000000000000000 | 11111111111111111111111111111111 |   -1 | 4294967295 
  1 | 00000000000000000000000000000001 | 11111111111111111111111111111110 |   -2 | 4294967294 
  2 | 00000000000000000000000000000010 | 11111111111111111111111111111101 |   -3 | 4294967293 
  3 | 00000000000000000000000000000011 | 11111111111111111111111111111100 |   -4 | 4294967292 
  4 | 00000000000000000000000000000100 | 11111111111111111111111111111011 |   -5 | 4294967291 
  5 | 00000000000000000000000000000101 | 11111111111111111111111111111010 |   -6 | 4294967290 
  6 | 00000000000000000000000000000110 | 11111111111111111111111111111001 |   -7 | 4294967289 
  7 | 00000000000000000000000000000111 | 11111111111111111111111111111000 |   -8 | 4294967288 
  8 | 00000000000000000000000000001000 | 11111111111111111111111111110111 |   -9 | 4294967287 
  9 | 00000000000000000000000000001001 | 11111111111111111111111111110110 |  -10 | 4294967286 
 10 | 00000000000000000000000000001010 | 11111111111111111111111111110101 |  -11 | 4294967285 
 11 | 00000000000000000000000000001011 | 11111111111111111111111111110100 |  -12 | 4294967284 
 12 | 00000000000000000000000000001100 | 11111111111111111111111111110011 |  -13 | 4294967283 
 13 | 00000000000000000000000000001101 | 11111111111111111111111111110010 |  -14 | 4294967282 
 14 | 00000000000000000000000000001110 | 11111111111111111111111111110001 |  -15 | 4294967281 
 15 | 00000000000000000000000000001111 | 11111111111111111111111111110000 |  -16 | 4294967280 
 16 | 00000000000000000000000000010000 | 11111111111111111111111111101111 |  -17 | 4294967279 
.....
247 | 00000000000000000000000011110111 | 11111111111111111111111100001000 | -248 | 4294967048 
248 | 00000000000000000000000011111000 | 11111111111111111111111100000111 | -249 | 4294967047 
249 | 00000000000000000000000011111001 | 11111111111111111111111100000110 | -250 | 4294967046 
250 | 00000000000000000000000011111010 | 11111111111111111111111100000101 | -251 | 4294967045 
251 | 00000000000000000000000011111011 | 11111111111111111111111100000100 | -252 | 4294967044 
252 | 00000000000000000000000011111100 | 11111111111111111111111100000011 | -253 | 4294967043 
253 | 00000000000000000000000011111101 | 11111111111111111111111100000010 | -254 | 4294967042 
254 | 00000000000000000000000011111110 | 11111111111111111111111100000001 | -255 | 4294967041
 

RomikChef

Guest
1. Поэкспериментируй :)
4. global
Еще один вопрос. Уменьшает, но пренебрежимо мало.
 

metton

Guest
2si
можно, пжлст, комментарий - я немного сейчас не соображаю...

2RomikChef
1. эксперементировал... всё равно не понял. возвращает непонятно что. во всяком случае, мне пока непонятно...
4. а через аргументы? кстати, всё-таки чем отличаются понятия "аргумент" и "параметр"?(в ф-циях)

2Demiurg
в мануале написано, что как-то можно передавать больше трёх, но как не написано...
 

makRo

Guest
1. параметр base в intval() - это указание системы счисления в которой представлена строка, которую нужно преобразовать.

Если и есть какое-либо теоретическое различие между аргументом и параметром (в математике), то в программировании это скорее одно и тоже
 

metton

Guest
2RomikChef
Блин!
Просто добивает!
Учусь я, эксперементирую, пытаюсь понять...
Я же не задаю этот вопрос в раздел "PHP для профеcсионалов (модерируемый)"...

2makRo
насчёт base - я понимаю, что это система счисления, но не понимаю, КАК это работает в данном случае
Вот, например:

$a = "2gf";
$b = intval ( $a, 10 );
echo ( $b );

выдаёт 2 - всё нормально.


$a = "2gf";
$b = intval ( $a, 2 );
echo ( $b );

возвращает 0 вместо ожидаемого мною 10...
 

Barlone

Guest
Ну ты блин даешь. intval($a,2) - у тебя $a должно быть в двоичной системе. А в двоичной системе есть только две цифры - "0" и "1", а "2" нет. В результате ты получишь целое число. Если тебе надо его в какую-то отличную от десятичной систему перевести, используй base_convert()
 

metton

Guest
2Barlone
Всё понял. Я просто думал, что он переводит число в систему base


2ALL
Ещё есть вопросы...

5. Есть две переменные:

list ( $start_msec, $start_sec ) = explode ( " ", microtime() ); // Начало сценария
/*
Сам сценарий
*/
list ( $now_msec, $now_sec ) = explode ( " ", microtime() ); // Начало сценария

$elapsed_time = $now_msec - $start_msec;

Почему $elapsed_time периодически становится отрицательным числом?!..


6. Почему в классах к атрибутам лучше обращаться (например, присвоение атрибуту значения) через методы?

Где-то прочитал, что это так, но не понял - ПОЧЕМУ...
 

makRo

Guest
5. Тут можно и самому подумать..

6. Это более универсально. Например пишешь сегодня код, а завтра вдруг понадобиться преобразовать эту переменную класса перед присвоением во что-нибудь или ещё чего.. то для этого нужно будет, просто изменить метод класса. А если бы значения присваивались напрямую (=), то придётся менять код во всех сценариях, которые используют этот класс..
 

metton

Guest
2makRo
6 понял - спасибо.

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

makRo

Guest
>а вот 5 вопрос - ну не понимаю я, как сценарий может >завершить свою работу до начала выполнения...

сделай
PHP:
<?php 

for($i=0; $i<5000; $i++) {
	print "time = ".microtime()."\n<br>\n";
}
?>
причём сначала идёт время в милисекундах (между секундами), а через пробел кличество секунд.
Посмотри динамику изменения и сам всё поймёшь..
 
Сверху