>var t = new Date().getTime();
>for(i = 0; i<10000000; i++){};
>var t1 = new Date();.getTime();
>document.write(«Time for executing: „+(t1-t)/1000 + sec.);
>Результаты для 1 страницы:
>IE — протестить не удалось, т.к. постоянно всплывает окошко с предложением заюлокировать сценарий (никак не >нашел, как его отключить)
>FireFox — 3,6 сек
>Opera — 5,7 сек
>Chrome- 0,3 сек О_О
>Результаты для 5 одновременно открытых страницах:
>IE — опять же протестить не удалось
>FireFox — 18 сек (при выполнении js в одной из вкладок — весь интерфейс блокируется, запускал по очереди)
>Opera — 27 сек (полная мультипоточность)
>Chrome- 0,3 сек О_О(полная мультипоточность)
Знаете, как-то настороженно я отношусь к таким тестам и таким числам… Вполне вероятно, что гугловский интерпретатор джаваскрипта оптимизирует такие конструкции как пустные циклы, или циклы содержашие только, к примеру, инкримент переменной, например
for(i = 0; i<10000000; i++){a++};
в что-то вроде такого
a += 10000000;
Т.е. Вы считаете, что веб-программисты после получения задачи сразу бросаются «педалить»… так делают действительно кодеры… которые пишут какие-то куски кода, и даже не понимают, что скрывается за этим кодом…
Я не знаю кто Вы, и какую именно работу выполняете. Если Вы считаете, что Вы — кодер, и это нормально, то это уже вопросы самооценки и самореализации.
Я работаю веб-программистом не первый год. И за это время пришлось заниматься многими вещами, многие задачи решать. Веб-программирование очень широкая область со своей спецификой отличной от программирования, скажем, микроконтроллеров, программирования игр или алгоритмического программирования. Но по объемам необходимых знаний для успешного решения поставленных задач, может даже и превосходит указанные выше области.
Если Вы пишете простенькие формачки или какие-то странички типа: «Я и моя собака...» то это одна история…, а когда Вы объединяете всех веб-программистов, многие из которых пишут серьезные приложения, имеющие сложные архитектурные решения; приложения которыми пользуются порой миллионы пользователей… так вот, когда Вы объединяете все это сообщество словом — «кодер», это не корректно по крайней мере.
Но опять же, я не буду убеждать Вас, что Вы не кодер…
да, тут я был не прав, но Вы сами видите, что это работать не будет.
По поводу агрегации. Агрегация - это отношение часть-целое в ООП. Можете почитать Гради Бутча для более подробного разъяснения.
это когда объект какого-то класса, содержит в себе объекты других классов.
Например
class A
{
$a = 'A';
}
class B
{
$b = 'B';
}
class C
{
$a;
$b;
function __construct($str1, $str2) {
$this->a = new A($str1);
$this->b = new B($str2);
}
}
В Вашем примере вы просто упростили обращение к методам вложенных классов, не
$C->a->a а просто
$C->a
Но принцип тот же, т.к. в массиве ExtendsClasses Вы храните экземпляры объектов
И вообще если объект класса C не instanceof A, то это не наследование :-)))
Нет, говорил я не о передаче параметров по ссылке, а о возвращаемом по ссылке значении.
Например, добавьте в Ваш класс А нечто подобное
Class A
{
//bla-bla-bla
public $notStatic;
function &RetByRefFunc() {
return $this->notStatic;
}
}
А теперь потестируем Ваш Класс
$test = new A("test");
$ref = &$test->RetByRefFunc();
$ref = "modified";
var_dump($test->RetByRefFunc()); //return modified
в этом подходе есть глюки есть глюки.
Если например в классе от которого "наследуемся" есть метод который что-то возвращает by ref, то это работать не будет.
так как call_user_method_array и подобные функции не возвращают by ref
и вообще, чем это просто агрегация, а не множественное наследование.
>for(i = 0; i<10000000; i++){};
>var t1 = new Date();.getTime();
>document.write(«Time for executing: „+(t1-t)/1000 + sec.);
>Результаты для 1 страницы:
>IE — протестить не удалось, т.к. постоянно всплывает окошко с предложением заюлокировать сценарий (никак не >нашел, как его отключить)
>FireFox — 3,6 сек
>Opera — 5,7 сек
>Chrome- 0,3 сек О_О
>Результаты для 5 одновременно открытых страницах:
>IE — опять же протестить не удалось
>FireFox — 18 сек (при выполнении js в одной из вкладок — весь интерфейс блокируется, запускал по очереди)
>Opera — 27 сек (полная мультипоточность)
>Chrome- 0,3 сек О_О(полная мультипоточность)
Знаете, как-то настороженно я отношусь к таким тестам и таким числам… Вполне вероятно, что гугловский интерпретатор джаваскрипта оптимизирует такие конструкции как пустные циклы, или циклы содержашие только, к примеру, инкримент переменной, например
for(i = 0; i<10000000; i++){a++};
в что-то вроде такого
a += 10000000;
так что эти числа для меня говорят о малом…
if ($a === $some_value)
{
//bla-bla
}
or
if ($a !== $some_value)
{
//bla-bla
}
кстати, конструкция switch в php использует для case-ов нетипизированное сравнение (==), поэтому я стараюсь избегать switch в php скриптах
т.е. данный код
$a = true;
switch ($a) {
case 1:
echo «1»;
break;
default:
echo «default»;
break;
}
выведет — «1»
Я работаю веб-программистом не первый год. И за это время пришлось заниматься многими вещами, многие задачи решать. Веб-программирование очень широкая область со своей спецификой отличной от программирования, скажем, микроконтроллеров, программирования игр или алгоритмического программирования. Но по объемам необходимых знаний для успешного решения поставленных задач, может даже и превосходит указанные выше области.
Если Вы пишете простенькие формачки или какие-то странички типа: «Я и моя собака...» то это одна история…, а когда Вы объединяете всех веб-программистов, многие из которых пишут серьезные приложения, имеющие сложные архитектурные решения; приложения которыми пользуются порой миллионы пользователей… так вот, когда Вы объединяете все это сообщество словом — «кодер», это не корректно по крайней мере.
Но опять же, я не буду убеждать Вас, что Вы не кодер…
По поводу агрегации. Агрегация - это отношение часть-целое в ООП. Можете почитать Гради Бутча для более подробного разъяснения.
это когда объект какого-то класса, содержит в себе объекты других классов.
Например
class A
{
$a = 'A';
}
class B
{
$b = 'B';
}
class C
{
$a;
$b;
function __construct($str1, $str2) {
$this->a = new A($str1);
$this->b = new B($str2);
}
}
В Вашем примере вы просто упростили обращение к методам вложенных классов, не
$C->a->a а просто
$C->a
Но принцип тот же, т.к. в массиве ExtendsClasses Вы храните экземпляры объектов
И вообще если объект класса C не instanceof A, то это не наследование :-)))
Например, добавьте в Ваш класс А нечто подобное
Class A
{
//bla-bla-bla
public $notStatic;
function &RetByRefFunc() {
return $this->notStatic;
}
}
А теперь потестируем Ваш Класс
$test = new A("test");
$ref = &$test->RetByRefFunc();
$ref = "modified";
var_dump($test->RetByRefFunc()); //return modified
$AString = 'StringA';
$BString = 'StringB';
$FirstClass = array( 'A', 'constructor_arguments' => array( &$AString ) );
$MultipleExtend = new MultipleExtendPattern( $FirstClass, 'B' );
$test2 = &$MultipleExtend->RetByRefFunc();
$test2 = "modified";
var_dump($MultipleExtend->RetByRefFunc()); //return NULL
Как Видите есть разница.
Если например в классе от которого "наследуемся" есть метод который что-то возвращает by ref, то это работать не будет.
так как call_user_method_array и подобные функции не возвращают by ref
и вообще, чем это просто агрегация, а не множественное наследование.