Jump to content
php.lv forumi
Sign in to follow this  
renarti

RENARTI PHP MVC Framework

Recommended Posts

regexp bremzi baazt korē ir augstākā mērā stulbi, tas pats attiecas uz explodi(protams daudz mazākā mērā nekā regexp). Ja nav elegantaaku risinājumu, tad labāk ir tā kā jau ir uztaisīts.

Share this post


Link to post
Share on other sites

Šausmas... tad visi mūsdienīgie freimi ir aboslūti stulbi. :(

Share this post


Link to post
Share on other sites

Pamatojums ir, jo regexi ir lēni?

Share this post


Link to post
Share on other sites

regexp nav vienkaarshi leeni tie ir Uber leeni, praatiigi cilveeki tos izmanto tikai tur kur citu alternatiivu nav. Protams ja izstraadaataajs razho app kuraa darbosies tikai vinja vecmaaminja tad taada pieeja ir pat vairaak kaa OK. Bet ja tas ir nopietns freimworks vai apps tipa facebook tad tas ir nepiedodami.

Share this post


Link to post
Share on other sites

pffft, regexps būtu pēdējais, par ko es uztrauktos..

 

Labāk pastāsti, kā uztaisīt normālu/advancētu routingu bez regexpa....?

Share this post


Link to post
Share on other sites

pffft, regexps būtu pēdējais, par ko es uztrauktos..

 

Labāk pastāsti, kā uztaisīt normālu/advancētu routingu bez regexpa....?

 

Atsevišķi faili ar GET parametriem!!!111one

Share this post


Link to post
Share on other sites

 

Atsevišķi faili ar GET parametriem!!!111one

 

Aw shit, man jātaisa routings kalendāram, kas čeko datumu (YYYY-MM-DD)... Esmu ticis jau līdz 1999. gada aprīlim, vēl bik ir ko rakstīt līdz 2038. :D

Share this post


Link to post
Share on other sites

regexp bremzi baazt korē ir augstākā mērā stulbi, tas pats attiecas uz explodi(protams daudz mazākā mērā nekā regexp). Ja nav elegantaaku risinājumu, tad labāk ir tā kā jau ir uztaisīts.

WTF? Tu vispār sajēdz, ko tu runā?

1 sekundē izgāja:

- 1`000`000 reizes - $a=explode('/','asdafd/asdfasdf/asdfasdf/asdfasdf');

- 1`000`000 reizes - 20 pēc kārtas sarakstīti $a=$a+1;

- 10`000`000 reizes - tukš for cikls;

 

explode ir aptuveni 20x lēnāks kā $a=$a+1;

Share this post


Link to post
Share on other sites

"Koda dievs",

 

jociigais cilveek Tu man centiisies ieskaidrot ka mashiinkoda operaacija - integer inkrements ir tikai 20 reizes aatraaks par rindas skaneeshanas un sastaavdalju paarsuutiishanas operaacijaam , dzekinj nokompilee uz c un paskaties kodu, varbuut tad tev naaks sapraats maajaas.

 

Jociigi laiki pienaakushi programmet saakushi visaadi rahiiti, kas c un vai asm nav redzeejushi un priekshstata par to kaa viss laaciitim veederaa notiek nav nekaada.

 

explode ir tuukstoshiem reizhu leenaaka nekaa $a=$a+1

 

taatad luuk, explode php funkcijas kods:

 

 

PHP_FUNCTION(explode)

{

zval **str, **delim, **zlimit = NULL;

int limit = -1;

int argc = ZEND_NUM_ARGS();

 

if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &delim, &str, &zlimit) == FAILURE) {

WRONG_PARAM_COUNT;

}

convert_to_string_ex(str);

convert_to_string_ex(delim);

 

if (argc > 2) {

convert_to_long_ex(zlimit);

limit = Z_LVAL_PP(zlimit);

}

 

if (! Z_STRLEN_PP(delim)) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");

RETURN_FALSE;

}

 

array_init(return_value);

 

if (! Z_STRLEN_PP(str)) {

if (limit >= 0 || argc == 2) {

add_next_index_stringl(return_value, "", sizeof("") - 1, 1);

}

return;

}

 

 

if (limit == 0 || limit == 1) {

add_index_stringl(return_value, 0, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);

} else if (limit < 0 && argc == 3) {

php_explode_negative_limit(*delim, *str, return_value, limit);

} else {

php_explode(*delim, *str, return_value, limit);

}

}

 

 

 

 

 

PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit)

{

char *p1, *p2, *endp;

 

endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);

 

p1 = Z_STRVAL_P(str);

p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);

 

if (p2 == NULL) {

add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);

} else {

do {

add_next_index_stringl(return_value, p1, p2 - p1, 1);

p1 = p2 + Z_STRLEN_P(delim);

} while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&

(limit == -1 || --limit > 1));

 

if (p1 <= endp)

add_next_index_stringl(return_value, p1, endp-p1, 1);

}

}

 

 

 

 

 

 

 

PHPAPI void php_explode_negative_limit(zval *delim, zval *str, zval *return_value, int limit)

{

#define EXPLODE_ALLOC_STEP 50

char *p1, *p2, *endp;

int allocated = EXPLODE_ALLOC_STEP, found = 0, i = 0, to_return = 0;

char **positions = safe_emalloc(allocated, sizeof(char *), 0);

 

endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);

 

p1 = Z_STRVAL_P(str);

p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);

 

if (p2 == NULL) {

/*

do nothing since limit <= -1, thus if only one chunk - 1 + (limit) <= 0

by doing nothing we return empty array

*/

} else {

positions[found++] = p1;

do {

if (found >= allocated) {

allocated = found + EXPLODE_ALLOC_STEP;/* make sure we have enough memory */

positions = erealloc(positions, allocated*sizeof(char *));

}

positions[found++] = p1 = p2 + Z_STRLEN_P(delim);

} while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL);

 

to_return = limit + found;

/* limit is at least -1 therefore no need of bounds checking : i will be always less than found */

for (i = 0;i < to_return;i++) { /* this checks also for to_return > 0 */

add_next_index_stringl(return_value, positions,

(positions[i+1] - Z_STRLEN_P(delim)) - positions,

1

);

}

}

efree(positions);

#undef EXPLODE_ALLOC_STEP

}

 

 

 

Un tagad saliidzini visu sho blaakji ar vienu inkrementa operaaciju: a++;

Share this post


Link to post
Share on other sites

Uztaisi benčmarku un tad posto PHP sourci, es C/C++ un ASM programmēju, kad tu vēl biksiņās čurāji. Varētu padomāt, ka $a++ PHP ir tas pats, kas a++ C. Nu nav tā. Esi padomājis kād memory menidžements stāv aiz PHP mainīgajiem? Tieši šī iemesla dēļ iekš PHP explode ir tikai 20 reizes lēnāks par $a++.

Ja $a++ izgāja 1M reizes sekundē, tad a++ iekš C iet ap 100M reizes sekundē. Bet mēs taču šeit runājam par PHP, vai ne?

Share this post


Link to post
Share on other sites

Es laikam esmu brutāls lamers. :) līdz šim eksplodēju request_uri pa segmentiem ar "/" kur [1] - kontrolieris (pēc tam $router[$uri[1]] = $real_controller name routings) [2] - action [3]....- argumenti :)

Ja nav 2, metu main, ja nav [1], metu index, ja [1] nav routēs, metu 404. :)

Share this post


Link to post
Share on other sites

codez, jaa php int tipa mainiigajam $a , $a++ ir tas pats kas ieksh c , a++

 

benchmarku uztaisiishu protams (un taas nebuus tikai 1M iteraacijas), diemzheel pagaidaam nav laika ar taadiem siikumiem kraameeties, jo ljoti daudz darba.

 

Par biksinjaas churaashanu, protams nolaidi greizi. Domaaju, ka pats veel maates pienu suuci , kad es nesu perfokartes ar ASM kodu uz auseklja ielu, piebilde - IBM PC tad veel nebija, visu dariijaam uz mainfreimiem, diskeshu arii nebija, ievaddati tikai caur perfokarteem, hehe, tas tik bija laiks...

 

 

Ever wonder how PHP can have so many different data types for its variables? PHP is regarded as a loosely typed language, and variables can change their data type easily. In fact, PHP can have eight different types:

  • integer numbers (stored as longs in c)
  • floating point numbers (stored as doubles in c)
  • strings (stored as a char array in c)
  • Booleans (stored as 0 or 1 as longs in c)
  • Arrays (stored as HashTable struct in c)
  • Objects (stored as zend_object_value in c)
  • Resources (stored as zend_object_value in c) [references functions or external PHP resources]
  • Null (nothing is stored, only type is set to null type)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...