Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
20.01.2008 17:26:07
<?php: kuidas funktsiooni sisse kaasata sõltumatu muutuja väärtus? |
|
|
Oletame, et kood on midagi sellist:
<?php
$yks = "üks";
//siin vahel on muid koode ja igast jura
//
function blah($kaks, $kolm){
if($yks == "üks"){
//siis teeme midagi
}else{
$neli = $kaks + $kolm;
}
return $neli;
}
// blaablaa
// siin kusagil kutsume välja funktsiooni:
$arv = blah(2,3);
?> |
Aga jama on selles, et funktsiooni sees on $yks täiesti tühi. Ma tean, et funktsiooni sees ja väljaspool olevad muutujad pole üldse samad, aga kas on kuidagi võimalik ka nii, et see $yks oleks automaatselt ka funktsiooni sees "üks"?
Seda oleks vaja nii, et ei pea seda muutujat $yks lisama blah() vahele, samas ei taha ka konstanti tekitada, kuna see $yks muutub pidevalt.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
andrusny
Kreisi kasutaja
liitunud: 20.03.2006
|
20.01.2008 17:37:32
|
|
|
<?php
$yks = "üks";
//siin vahel on muid koode ja igast jura
//
function blah($kaks, $kolm){
global $yks ;
if($yks == "üks"){
$neli = $kaks * $kolm;
}else{
$neli = $kaks + $kolm;
}
return $neli;
}
// blaablaa
// siin kusagil kutsume välja funktsiooni:
$arv = blah(2,3);
echo $arv;
?> |
_________________
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
20.01.2008 19:07:40
|
|
|
global $muutuja; -- ja asi toimib! Ei arvanud, et nii lihtne! Tänud!
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
morgoth
HV kasutaja
liitunud: 14.01.2004
|
20.01.2008 20:12:12
|
|
|
Globaalmuutujate kasutamine ei vasta kodeerimise heale tavale. Saab ika ilma hakkama.
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
10 |
|
tagasi üles |
|
|
andrusny
Kreisi kasutaja
liitunud: 20.03.2006
|
20.01.2008 20:44:46
|
|
|
Teine võimalus on see funktsiooni välja kutsumisel lisada.
function blah($kaks, $kolm,$yks){ |
Kui ei vasta tavadele, miks sa ei paku lahendust siis?
_________________
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
Telempe
Kreisi kasutaja
liitunud: 02.11.2002
|
20.01.2008 22:54:01
|
|
|
php:
|
<?php //siin vahel on muid koode ja igast jura // function blah($kaks, $kolm){ if(yks == "üks"){ $neli = $kaks * $kolm; }else{ $neli = $kaks + $kolm; } return $neli; } // blaablaa // siin kusagil kutsume välja funktsiooni: $arv = blah(2,3); ?>
|
_________________ ORLY? I hardly know her! |
|
Kommentaarid: 22 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
21 |
|
tagasi üles |
|
|
andrusny
Kreisi kasutaja
liitunud: 20.03.2006
|
20.01.2008 23:11:34
|
|
|
tsitaat: |
define(yks,"üks"); |
Mis see nüüd on? See yks ei ole nüüd muutuja? Kui nüüd oleks vaja muutujat, kas siis teha tuleks nii?
$i = "üks";
define(yks, $i); |
_________________
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
21.01.2008 11:54:27
|
|
|
morgoth kirjutas: |
Globaalmuutujate kasutamine ei vasta kodeerimise heale tavale. Saab ika ilma hakkama. |
Ma sooviks ka mingit näidet vms.
Nagu ma ütlesin, et nii ma ei taha (sest ma ei saa nii):
Sain asja korda, kui panin:
Ja miks viimane peaks halb olema? Mingi turvarisk?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
AMD
HV veteran
liitunud: 29.07.2003
|
21.01.2008 13:21:33
|
|
|
tsitaat: |
Sain asja korda, kui panin:
Ja miks viimane peaks halb olema? Mingi turvarisk?
|
Pakun huupi aga kui $yks peaks eelnevalt defineerimata olema, siis v-o on seda võimalik ette anda $_POST / $_GET muutujatega.
_________________ From now on, the forum is owned by AMD.That means that you are NO LONGER allowed to talk about, or even mention *ntel. |
|
Kommentaarid: 335 loe/lisa |
Kasutajad arvavad: |
|
:: |
145 :: |
3 :: |
12 |
|
tagasi üles |
|
|
Telempe
Kreisi kasutaja
liitunud: 02.11.2002
|
|
Kommentaarid: 22 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
21 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
21.01.2008 15:36:49
|
|
|
AMD kirjutas: |
Pakun huupi aga kui $yks peaks eelnevalt defineerimata olema, siis v-o on seda võimalik ette anda $_POST / $_GET muutujatega. |
Kuidas keegi väljastpoolt minu serverit saaks muutujat $yks kuidagi muuta? $_POST / $_GET peaks selleks ju siis ikkagi minu koodis olema...? Mul antakse iga lehekülje päises muutujale $yks mingi kindel väärtus. Pakun, et ei saaks seda muutujat isegi siis muuta, kui RG oleks ON. Või saaks?
Mul on üks osa muutujaid, millede väärtused on conf-i failis kindlaks määratud ja neid kasutatakse saidil globaalselt.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mks
HV veteran
liitunud: 27.09.2004
|
21.01.2008 16:43:56
|
|
|
Eeldusel, et serveril on register_globals sees, siis aadressireale domeen.xxx/fail.php?yks=midaiganes niipalju kui ma aru olen saanud...
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
21.01.2008 17:14:59
|
|
|
väga väga paha soovitus on see
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
Telempe
Kreisi kasutaja
liitunud: 02.11.2002
|
21.01.2008 18:29:30
|
|
|
"Relying on this feature is highly discouraged." on paha soovitus?
_________________ ORLY? I hardly know her! |
|
Kommentaarid: 22 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
21 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
21.01.2008 23:42:10
|
|
|
Telempe kirjutas: |
"Relying on this feature is highly discouraged." on paha soovitus? |
jah, register_globals on kurja juur
sealsamas php lehel näide nr1 on väga hea näide
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
mks
HV veteran
liitunud: 27.09.2004
|
21.01.2008 23:50:26
|
|
|
mikk36 kirjutas: |
Telempe kirjutas: |
"Relying on this feature is highly discouraged." on paha soovitus? |
jah, register_globals on kurja juur
sealsamas php lehel näide nr1 on väga hea näide |
"Selle funktsiooni kasutamine on rangelt mittesoovitatud" oleks lause lähikaudne tõlge inglise keelt vaja meelde tuletada
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
|
nene
Kreisi kasutaja
liitunud: 20.03.2004
|
22.01.2008 02:49:43
|
|
|
Tegelikult sellise abstraktse koodinäite puhul ei saa öelda, milline oleks õige lähenemine. Vaja oleks siiski teada, mida see funktsioon teeb selle muutujaga ja mida tolle muutuja väärtus endast kujutab.
Üldiselt pole globaalsete muutujate kasutamine eriti taunitav, kuid pole reegleid ilma eranditeta ja teinekord on just see kõige parem lahendus.
Antud juhtum pole aga eriti seotud register_globals direktiiviga. Globaalsetest muutujatest tuleks proovida hoiduda ükskõik mis keeles progammeerides. Põhjus on selles, et globaalseid muutujaid kasutav funktsioon muutub kergemini haavatavaks - ta hakkab tugevasti sõltuma sellest keskkonnast, kus ta jookseb. Tarvitseb vaid tollel muutujal mingil ajahetkel omandada ebasobiv väärtus ning funktsioon lakkab korrektselt funktsioneerimast.
Aga alustuseks võiks sa siiski öelda, miks sa ei saa seda muutujat kaasa anda funktsiooni parameetrina? Sa ütled, et sa ei saa. Kuid miks?
|
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
23.01.2008 09:43:11
|
|
|
nene kirjutas: |
Aga alustuseks võiks sa siiski öelda, miks sa ei saa seda muutujat kaasa anda funktsiooni parameetrina? Sa ütled, et sa ei saa. Kuid miks? |
Sellepärast, et selle muutuja $yks puhul on tegemist muutujaga, mida kaasa panna oleks tüütu -- peaksin ümber tegema kõik funktsiooni väljakutsumise kohad.... Ja ühel juhul on tegemist confifailis määratud väärtusega $shift=#mingiarv# ja siis $yks=time()+$shift - mida oleks väga ebadünaamiline iga funkts. sees uuesti määrata.
Ma ei kasuta kunagi enam RG=ON, sain sellest juba möödunud aastal üle.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
23.01.2008 09:56:12
|
|
|
SGM, kasuta siis search funktsiooni, saad ehk kiiremini
tahad programmeerida siis programmeeri, mõnuga
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
23.01.2008 12:56:17
|
|
|
mikk36 kirjutas: |
SGM, kasuta siis search funktsiooni, saad ehk kiiremini
tahad programmeerida siis programmeeri, mõnuga |
Kasutan seda nagunii. Aga global $muutuja; on mugavam. Pealegi on mul antud juhul tegemist kahjutute muutujatega - selle kaudu lehte peppu ei keera.
Ma ei programmeeri mõnuga, sest ma jään alati matemaatika taha toppama - see oli koolis ka "2" mul! Programmeerin vaid sellepärast, et keegi teine seda minu eest ei tee! Vähemalt mitte taskukohase hinnaga.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
okpoiss
HV kasutaja
liitunud: 07.11.2001
|
25.01.2008 09:52:15
|
|
|
No kui sul ühe kooditsükli jooksul $yks väärtus ei muutu, siis oleks kõige parem kasutada muutuja defineerimist nagu Telempe soovitas. Võid ka nii define($yks, ''Üks"); Või kui muujta vääärtus tuleb kogu aeg GET meetodi kaudu siis define($yks,addslashes($_GET['yks'])]; addslashes siis selleks, et kui keegi üritab igasuguseid keelatud märke urli kirjutada siis need muudetakse kahjututeks.
Kui muutujatel väärtus ei muutu, siis on parem nad defineerida. Sellisel juhul ei saa nendele koodi hiljem enam mingit muud väärtust anda ja samas defineeritud muutuja jookseb läbi ka funktsioonidest.
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
mks
HV veteran
liitunud: 27.09.2004
|
25.01.2008 19:29:14
|
|
|
afaik okpoiss meetodit kasutades siis kuhugi kasutaja suunas funktsiooni väärtuse väljastamisel peaks kasutama ka stripslashes ... võin ka eksida
|
|
Kommentaarid: 11 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
9 |
|
tagasi üles |
|
|
SGM
HV kasutaja
liitunud: 04.12.2005
|
27.01.2008 20:02:13
|
|
|
Väga hea! Mul ongi päris mitu kindlat muutujat, mis on saidi confifailis sees ja nendele annan väärtuse otse php-faili sisu muutes. Saidi töö kestel nende väärtused ei muutu. Väärtused ei tule andmebaasist.
Samas hakkab siin-seal viskama ette "Notice: Undefined variable... blaablaa", kui panen error_reporting(E_ALL); -- siis on hea näha, mis muutujad on tühjalt, isegi ilma vale väärtuseta. Näiteks if($muutuja == $midagi) juures hakkab ajama oma notice-jama. Aga kui enne (koodi alguses) olen $muutuja-le andnud niisama võrdusmärgiga väärtuseks kasvõi 0, siis enam ei kisanud mul sedasi.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
27.01.2008 20:49:06
|
|
|
SGM, nii peabki olema
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
okpoiss
HV kasutaja
liitunud: 07.11.2001
|
27.01.2008 21:44:56
|
|
|
mks kirjutas: |
afaik okpoiss meetodit kasutades siis kuhugi kasutaja suunas funktsiooni väärtuse väljastamisel peaks kasutama ka stripslashes ... võin ka eksida |
Jah stripslashes on vastupidine funktsiooni addslashes'ile. Stripi kasutaks andmete kuvamisel, et eemaldada kahtlaste märkide eest kaldkriipsud. Muidu oleks kuvamise väljund näiteks \'Tere\'.
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
|