Jump to content
php.lv forumi

Par OOP


Prayer !!

Recommended Posts

  • Replies 30
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Tātad, kkas man izdevas.. Bija daudz neuzmanības/nezināšanas kļūdu, bet tās salaboju..:)

Darbojas ar vienu bet, kas man shkiet ka nedarbojas tomer..Par to talak.. :)

 

 

action.php

http://paste.php.lv/7635?lang=php

imageresize.php

http://paste.php.lv/7636?lang=php

constants.php

http://paste.php.lv/7637?lang=php

 

lieta tada, ka man shkiet ka nedarbojas imageresize.php faila kur ir if($var1 > $var2){...} neiet tas operators > , bet uzreiz aiziet uz else un to ari izpilda vienmer.. varbut es kludos, bet apskatieties pashi..

Godigi man vajadzetu kritiku par sho skriptu.. lai saprastu kā pareizāk veidot klases utt.. tai skaitā arī šajā skriptā :)

Paldies ka palīdzat man mācīties.. :)

Edited by Prayer !!
Link to comment
Share on other sites

tas ka neiet kāda f-ja ir jālabo tieši tāpat, kā to darītu, ja rakstītu bez oop.

 

kritika oop mācīšanās kontekstā..

 

imageresize.php

Nevajag failā, kurā glabā tikai klasi ņemt un taisīt viņas instanci. liec to darbību action.php. ja gribi singletonu, tad to dara mazliec citādi.

Klases sauc sākot ar Lielo burtu, bet metožu nosaukumus ar mazo (kā to dara zend frameworkā, java, ruby, utt).

Tāpat tas echo klases imageResize metodēs ir nesmuki, outputu no ta visa iekš action.php taisi.

un vispār, imageResize vietā nosauc viņu par MyImage, pieliec konstruktoru, kuram var padot ceļu uz bildi, uztaisi savu __toString() metodi, lai galu galā vari rakstīt kaut ko šādu:

$img = new MyImage("bilde.jpg");
list($w, $h) = $img->getSize();
$img->resizeTo(10,10);
echo $img; // echo $img->__toString();

utt

 

constants.php

Konstantes liec nevis globālas ar define, bet gan klasē ar const - būs pa rightīgo oop :)

Edited by v3rb0
Link to comment
Share on other sites

Es atzišos, ka nezinu vai sapratu tavus iteikumus pareizi, bet here goes nothing ;)

 

Tatad action.php kur var ievietot jaunas bildes velamos izmerus. tai skaita ari pashas bildes nosaukumu..

 

http://paste.php.lv/7638?lang=php

 

Un te imageresize.php fails, kura pievienoju konstruktoru un __toString, un getSize() ievietoju list funkciju..

 

http://paste.php.lv/7639?lang=php

 

Dīvaini ir tas, ka ja jau man bija tas const vertibas irWidth un irHeight, tad kada no vinjam jega, ja liekot resizeTo(width, height), vinjs tam vertibam nevar pieshkirt citu vertibu + ja varetu tad tas vnk nomainitu..

Nezinu vai visu izpratu ko teici, bet instanci parcelu uz action.php, pārakstiju nosaukumus, lai atbilst OOP standartiem :D , parcelu visu output uz action.php, nomainiju nosaukumu uz MyImage(laikam personiskās iegribas :D ), pieliku konstruktoru, kas padod celju uz bildi, uztaisiju __toString metodi..

Liels paldies tev palīdzibu jebkura gadijuma :) Tiešām gribas iemācīties :)

Link to comment
Share on other sites

nomainiju nosaukumu uz MyImage(laikam personiskās iegribas :D )

Nav personiskās iegribas :) Pierodi pie tā, ka iekš oop tu strādā un domā ar objektiem. Imageresize ir darbība - to grūti iztēloties kā objektu, MyImage ir konkrēts priekšmets (bilde), kas pilnīgi loģiski ir objekts. Dodot pareizus klašu nosaukumus, tu trenējies domāt pareizās kategorijās.

 

Par pašu klasi.

1) metode getSize() - neredzu jēgu viņu taisīt publisku. Taisi private, un izsauc no konstruktora.

2) publiskas objekta īpašības ir slikts stils. Taisi private, un klāt tiec caur get/set metodēm:

echo "Start Width: ".$img->getWidth()."<br/>";
echo "Start Height: ".$img->getHeight()."<br/>";

Palasi ko par inkapsulācijas jēdzienu.

Edited by john.brown
Link to comment
Share on other sites

Ok, sapratu par to klašu nosaukumiem.. Daudzas lietas pārliku uz private, jo ublic tam naw nepieciešams..

Tad vel uztaisiju getHeight un get Width metodes ar visu string, bet protams var ari izvilkt tikai width un height un pashu stringu salikt kopa, ka john.brown rakstīja..

Pamainiju nosaukumu atbilstoshaku sakuma garumam un platumam, lidzarto praktiski varētu iztikt ar __toString metodi, lai izvilktu visas vērtības.. Un nebutu nepieciešamība pec getWidth un getHeight, lai to attēlotu uz ekrāna, bet protams praktiska pielietojuma, man to drošivien nevajadzēs darīt td arī tiktu izmantoti getWidth un getHeight metodes, vai ari tas vertibas saglabātas db..

 

Palasi ko par inkapsulācijas jēdzienu.

 

man naw ne jausmas, kas tas ir :)

 

un te ari ir faili

action.php

 

http://paste.php.lv/7641?lang=php

 

un resizeimage.php

 

http://paste.php.lv/7642?lang=php

Link to comment
Share on other sites

vēl failu, kurā glabā tikai vienu klasi, nosauc tāpat kā saucas klase, būs vieglāk orientēties kas kurā failā ir.

 

inkapsulācija - tas ar ir, public/private/protected, tb. 'tiesības', kas un ko var ar objectu darīt. Domā par objektu, kā melnu bumbuli ar 3 podziņām un vienu mazu led ekrānu, saspiežot podziņas(izsaucot public metodes), kaut kas uz ekrāna parādās(arī public metodes izsaukums), bet kas bumbulim vēderā(private) objecta izmantotājam nav jāzin.

Link to comment
Share on other sites

esmu iepazinies ar inkapsulācijām :) vienigi atliek vinjas prakse pareizi izmantot.. kā kopumā izskatās, pieņemot to ka pamaina ari pasha faila nosaukumu..?? varbut vel kkas jamaina.. es domaju ka vsp man labi sanaca galu gala ar jusu palīdzību :) taka liels paldies :)

Link to comment
Share on other sites

Nu - tas nav īsti par OOP, bet nelabi, ka getWidth un getHeight metodes atgriež arī tos tekstus. Jēdzīgāk būs, ja atgriezīs tikai INTus un tekstus pēc tam piekabini klāt.

 

Šis varbūt subjektīvi - man nekad nav paticis, ka funkcijai nosaukums ir getKautkas, ja reāli tā neatgriež neko. getKautkas imo ir priekš getteriem. (Tas par getSize())

 

__toString pielietojums arī nav īsti korekts, imo. Atbilstošāk būtu, ja tas, piemēram, atgrieztu tikai bildes nosaukumu vai ko tādu. Tb kaut ko tādu ar ko var operēt arī tālāk, nevis, kas ir tīri informatīvs tikai. Bet tās atkal tikai manas domas.

Link to comment
Share on other sites

nu ja tu butu palasijis visu postu un atbildes saprastu ka tas ir tikai lai izprastu OOP nevis praktiskam nolukam..

+es rakstiju ka par getHeight un get Width, un teicu ka labak butu atgriest tikai vertibas..

bet nu paldies par kritiku.. :D

Link to comment
Share on other sites

em es jau kopsh atveru šo topicu mēģinu uztaisīt pareizi pēc OOP standartiem.. Tas ko tu uzrakstiji, bija tas pats ko es uzrakstiju dažus postus atpakaļ + nevajag piesieties pie katra varda ko pasaku, dieva del es vel tikai macos pielaboju sho skriptu biezi, praktiski es shis vertibas jaunas height un width nemaz neceltu uz ekrana vai vispar arpus objekta, iznemot ievaditu tās db, lai pectam varetu izmantot..

Link to comment
Share on other sites

__toString pielietojums arī nav īsti korekts, imo. Atbilstošāk būtu, ja tas, piemēram, atgrieztu tikai bildes nosaukumu vai ko tādu. Tb kaut ko tādu ar ko var operēt arī tālāk, nevis, kas ir tīri informatīvs tikai. Bet tās atkal tikai manas domas.

ja lieto kādu logošanu, tad __toString(), kas atgriež visu informāciju par objectu(vai galveno, lielajiem objectiem), ieskaitot tā klases nosaukumu, man liekas ērti, vari rakstīt

$logger->log($objects);

un logā parādīsies kaut kas kas kā

{Foo bar=1, fooChildi=[{Child id=1}, {Child id=2}]}

kas ar nozīmē, ka $objects ir Foo klases, ar propertiju bar kas vienāds ar viens un diviem childiem, abi ir Child klases instances, vienam id ir 1 otram 2.

Edited by v3rb0
Link to comment
Share on other sites


×
×
  • Create New...