Jump to content
php.lv forumi

Klases un funkcijas


Sliipeetais

Recommended Posts

Man ir funkcija, iekš kuras ir funkcija no klases.

 

Funkcija no klases:

<?php

class table {

var $html;

function returnTable() {

 $this->html.="</table>\n";
 return $this->html;

}

}
?>

 

Funkcija:

function kautkaada(){
	 
	 $table = new table();
	 $table->returnTable();

}

 

Rezultātā tiek atgriezta kļūda:

 

Fatal error: Call to a member function on a non-object in //$table->returnTable();

 

Kur ir problēma?

Link to comment
Share on other sites

Nezinu kā tev, bet man šāds kods:

<?php
 class table {
   var $html;

   function returnTable() {
     $this->html.="</table>\n";
     return $this->html;
   }
 }

 function kautkaada(){
   $table = new table();
   echo $table->returnTable();
 }

 kautkaada();
?>

strādā. Moš pamēģini pats palaist? Vai arī iedod precīzāku kodu, kurš nestrādā.

Link to comment
Share on other sites

function returnTable() {

$this->html.="</table>\n";
return $this->html;

}
function kautkaada(){
 
 $table = new table();
 $table->returnTable();

}

 

Cik skatos, vinsh tev atgriezh </table>\n, bet funkcijaa ar kuru tu izsauc returnTable, tu neesi noraadiijis ko lai vinsh dara ar to atgriezto veertiibu, respektiivi tu to neizvadi, pameegjini kaa bubu:

 

function kautkaada(){
 
 $table = new table();
 echo $table->returnTable();

}

Edited by deo
Link to comment
Share on other sites

pieļauju domu, ka tu klases definīciju esi iznesis citā failā, kuru savukārt esi aizmirsis pēc tam iekļaut ar include/require dzimtas funkcijām, attiecīgi PHP nav nekādas nojausmas, kas ir objekts table.

Link to comment
Share on other sites

Ahh, tas OOP mani padarīs traku! Līdzko viena problēma atrisināta, uzrodas nākamā. :)

 

Tagad man ir divas klases - viena tabulu veidošanai:

 

<?php

class table {

var $html;

function table($id, $caption='') {

 $this->html="<table id=\"$id\">\n";
 if(!empty($caption)){
	 $this->html.="  <caption>$caption</caption>\n";
 }

}

function addHeaders() {

 $this->html.="  <tr>\n";
 foreach(func_get_args() as $item) {
	 $this->html.="    <th>$item</th>\n";
 }
 $this->html.="  </tr>\n";

}

function addRow($array, $header='') {

 $this->html.="  <tr>\n";
 if(!empty($header)){
	 $this->html.="    <th>$header</th>\n";
 }
 foreach($array as $item) {
	 $this->html.="    <td>$item</td>\n";
 }
 $this->html.="  </tr>\n";

}

function returnTable() {

 $this->html.="</table>\n";
 return $this->html;

}

}

?>

 

otra form elementiem:

<?php

class form {

var $html;

function form($method, $action="index.php") {

 $this->html="<form method=\"$method\" action=\"$action\">\n";

}


function addTextbox($size, $name, $value='') {

 $this->html.="<input type=\"text\" name=\"$name\" value=\"$value\" size=\"$size\" />\n";

}

function addCheckbox($name, $value, $checked='') {

 $this->html.="<input type=\"checkbox\" name=\"$name\" value=\"$value\" $checked />\n";

}

function addGroupboxHead($legend) {

 $this->html.="<fieldset style=\"padding: 2\">\n<legend>$legend</legend>\n";

}

function addGroupboxFoot() {

 $this->html.="</fieldset>\n";

}

function addDropdownboxHead($name) {

 $this->html.="<select size=\"1\" name=\"$name\">\n";

}


function addDropdownboxChoice($value, $text, $selected='') {

 $this->html="<option value=\"$value\" $selected>$text</option>\n";

}

function addDropdownboxFoot() {

 $this->html.="</select>\n";

}

function addSubmitButton($value, $name) {

 $this->html.="<input type=\"submit\" value=\"$value\" name=\"$name\">";

}

function returnForm() {

 $this->html.="</form>\n";
 return $this->html;

}

}

?>

 

Bet ko darīt situācijā, ja man ir vēlme izveidot Groupbox (no form klases), ievietot iekš tā tabulu (no table klases), un iekš tabulas likt atkal form elementus?

Edited by Sliipeetais
Link to comment
Share on other sites

Ahh, tas OOP mani padarīs traku! Līdzko viena problēma atrisināta, uzrodas nākamā. :)

 

Tagad man ir divas klases - viena tabulu veidošanai:

 

..

 

otra form elementiem:

 

..

 

Bet ko darīt situācijā, ja man ir vēlme izveidot Groupbox (no form klases), ievietot iekš tā tabulu (no table klases), un iekš tabulas likt atkal form elementus?

Piedrāzt to OOP tādā gadījumā :)

 

Man arī iesākumā likās, ka formas ģenerēt ar OOP palīdzību ir stilīgi, labi, tālejoši domājoši un tā tālāk. Bet tā nav. Katra forma jebkurā gadījumā ir savādāka un prasa savādāku pieeju, tāpēc es ieteiktu aizmirst par OOP kodu, kas ģenerē formas. Daudz vienkāršāk ir ņemt un formas sarakstīt tīrā XHTML un pēc tam vienādi ar CSS noformēt.

 

Tieši to pašu es gribētu teikt par tabulu veidojošo klasi - lai paredzētu visus tabulu veidus, kādus vien var ievajadzēties, tev nāksies 20 reizes izgudrot jaunu divriteni, pie tam tu tikai lieki sarežģīsi savu kodu. OOP ir izmantojams vietās, kur tas dzīvi atvieglo, nevis rada liekas problēmas.

 

Tam visam ir viens iemesls - tu nevari paredzēt un iekļaut visus formas atribūtus savā OOP kodā. Kaut vai viens piemērs - uztaisi man ar savu OOP kodu read-only text input lauku. Ko darīsi? Pārrakstīsi savu klasi. Nākamais piemērs - uztaisi man ar savu OOP kodu teksta lauku, kurā var ierakstīt ne vairāk kā 100 simbolus - atribūts maxlength, atkal vēl viens parametrs, kas ir nododams klases metodei. Tā varētu turpināt līdz bezsamaņai, jo jebkurā brīdī klients var palūgt, lai tu ievieto blakus divus teksta laukus (teiksim, personas kodam) un atkal tev nākas pārrakstīt savu klasi. Tajā pašā laikā, rakstot formas kodu no rokas tu uz šīm izmaiņām vari noreaģēt burtiski dažu minūšu laikā un nebūs jālauza galva par to, vai tavs OOP kods tādu lietu atļauj, vai nē.

Link to comment
Share on other sites

  • 1 month later...
Tieši to pašu es gribētu teikt par tabulu veidojošo klasi - lai paredzētu visus tabulu veidus, kādus vien var ievajadzēties, tev nāksies 20 reizes izgudrot jaunu divriteni, pie tam tu tikai lieki sarežģīsi savu kodu. OOP ir izmantojams vietās, kur tas dzīvi atvieglo, nevis rada liekas problēmas.

 

Tam visam ir viens iemesls - tu nevari paredzēt un iekļaut visus formas atribūtus savā OOP kodā. Kaut vai viens piemērs - uztaisi man ar savu OOP kodu read-only text input lauku.

Nepiekritiishu. Esmu uzrakstiijis sev tabulu gjenereejoshu klasi, ar kuru var sagjenereet jebkaadu tabulu.

Par atribuutiem. Prieksh tam man html objektiem ir parametrs $attr, kuraa tad kaa masiivu mieriigi sabaazhu jebkurus taga parametrus, kuri ievajagaas.

Saapes saakas tieshi tajaa mirklii, kad pietiekoshi daudz un dinamiskus colspanus un rowspanus jaataisa bez sakariigas OOP pieejas.

Taa kaa nav nemaz taa ideja tik slikta, ja visu pietiekoshi flexibli izplaano.

Pilniibaa esmu apmierinaats :)

Link to comment
Share on other sites

Tieši to pašu es gribētu teikt par tabulu veidojošo klasi - lai paredzētu visus tabulu veidus, kādus vien var ievajadzēties, tev nāksies 20 reizes izgudrot jaunu divriteni, pie tam tu tikai lieki sarežģīsi savu kodu. OOP ir izmantojams vietās, kur tas dzīvi atvieglo, nevis rada liekas problēmas.

 

Tam visam ir viens iemesls - tu nevari paredzēt un iekļaut visus formas atribūtus savā OOP kodā. Kaut vai viens piemērs - uztaisi man ar savu OOP kodu read-only text input lauku.

Nepiekritiishu. Esmu uzrakstiijis sev tabulu gjenereejoshu klasi, ar kuru var sagjenereet jebkaadu tabulu.

Par atribuutiem. Prieksh tam man html objektiem ir parametrs $attr, kuraa tad kaa masiivu mieriigi sabaazhu jebkurus taga parametrus, kuri ievajagaas.

Saapes saakas tieshi tajaa mirklii, kad pietiekoshi daudz un dinamiskus colspanus un rowspanus jaataisa bez sakariigas OOP pieejas.

Taa kaa nav nemaz taa ideja tik slikta, ja visu pietiekoshi flexibli izplaano.

Pilniibaa esmu apmierinaats :)

ja nav žēl, padalies ar kodu un izmantošanas piemēru, paskatīsimies ;)

Link to comment
Share on other sites

Tieši to pašu es gribētu teikt par tabulu veidojošo klasi - lai paredzētu visus tabulu veidus, kādus vien var ievajadzēties, tev nāksies 20 reizes izgudrot jaunu divriteni, pie tam tu tikai lieki sarežģīsi savu kodu. OOP ir izmantojams vietās, kur tas dzīvi atvieglo, nevis rada liekas problēmas.

 

Tam visam ir viens iemesls - tu nevari paredzēt un iekļaut visus formas atribūtus savā OOP kodā. Kaut vai viens piemērs - uztaisi man ar savu OOP kodu read-only text input lauku.

Nepiekritiishu. Esmu uzrakstiijis sev tabulu gjenereejoshu klasi, ar kuru var sagjenereet jebkaadu tabulu.

Par atribuutiem. Prieksh tam man html objektiem ir parametrs $attr, kuraa tad kaa masiivu mieriigi sabaazhu jebkurus taga parametrus, kuri ievajagaas.

Saapes saakas tieshi tajaa mirklii, kad pietiekoshi daudz un dinamiskus colspanus un rowspanus jaataisa bez sakariigas OOP pieejas.

Taa kaa nav nemaz taa ideja tik slikta, ja visu pietiekoshi flexibli izplaano.

Pilniibaa esmu apmierinaats :)

ja nav žēl, padalies ar kodu un izmantošanas piemēru, paskatīsimies ;)

Ok, buushu labs un noshaareeshu vienu zaru no savas laborotorijas :)

 

http://paste.php.lv/1308

http://paste.php.lv/1309

http://paste.php.lv/1310

http://paste.php.lv/1311

http://paste.php.lv/1312

 

Protams, viss jaaincludo pareizajaa kaartiibaa.

Link to comment
Share on other sites

No vienas puses skaisti, taču no otras puses - man piemēram būtu diezgan sarežģīti iebraukt, kas un kā jādara, lai panāktu vajadzīgo efektu, tāpēc arī palieku pie domas, ka gan tabulas, gan cita veida masīvs HTML (tabulas, formas, utt.) ir jābūvē ar šabloniem, nevis ģenerējot ar klasēm.

Link to comment
Share on other sites

×
×
  • Create New...