Volanie Class::function – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Volanie Class::function – PHP – Fórum – Programujte.comVolanie Class::function – PHP – Fórum – Programujte.com

 

Zelenac140
Newbie
12. 4. 2020   #1
-
0
-

Dobrý deň,

potrebujem poradiť našiel som na internete že by malo fungovať ked zavolam triedu a funkciu takto:

Head::hlavicka();

ale na websupporte mi vypisuje chybovú hlášku, ak ju nahradím vyššie uvedený kód týmto:

$head = new Head;
$head->hlavicka();

tak všetko funguje, ale chcem sa opytať či je to zlý spôsob volania triedy hore uvedený alebo ako sa da zavolať trieda nejakým podobným spôsobom ? 

 Uncaught Error: Using $this when not in object context in

ďakujem

Nahlásit jako SPAM
IP: 178.41.192.–
Kit+15
Guru
12. 4. 2020   #2
-
0
-

#1 Zelenac14
Tato volání se zásadně liší, nelze je zaměnit.

Pokud použiješ 

Head::hlavicka();

tak je to volání statické metody, tedy metody, která patří třídě a může pracovat jen se statickými atributy třídy.

Naproti tomu 

$head = new Head;
$head->hlavicka();

první řádek vytvoří instanci třídy, druhý řádek volá metodu, která patří objektu. Taková metoda může pracovat se statickými atributy i s atributy objektu.

Statické metody mají jen omezené použití, měl bys dávat přednost objektům.

Nahlásit jako SPAM
IP: 46.135.28.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zelenac140
Newbie
12. 4. 2020   #3
-
0
-

Tak keď pišem takto triedu tak to asi robíme zle? 

<?php
include_once __DIR__."/../db/MySQL.php";
include_once __DIR__."/../data/Data.php";
include_once __DIR__."/../data/ValiData.php";
include_once __DIR__."/../Form/Admin.php";
class Text{
	
	public function __construct(){
		session_start();

		$this->MySQL 	= new MySQL;
		$this->Data  	= new Data;
		$this->ValiData = new ValiData;
		$this->Form  	= new Form;

		$this->lang		= $this->Data->html($_session['lang']);
		$this->id 		= $this->Data->html($_POST['id']);
		$this->Name 	= $this->Data->html($_POST['Name']);
		$this->Text 	= $this->Data->html($_POST['Text']);
		$this->Seo  	= $this->Data->html($_POST['Seo']);
		$this->Url  	= $this->Data->html($_POST['Url']);
		$this->Status  	= $this->Data->html($_POST['Status']);

	}


	private function insert(){

		list($validate, $error) = $this->ValiData->strlen_min($this->name, 'Názov', '5')
												 ->strlen_min($this->text, 'Text', '5')
												 ->strlen_min($this->seo[0], 'Title', '5')
												 ->strlen_min($this->seo[2], 'Description', '5')
												 ->strlen_min($this->url, 'Url názov', '5')
												 ->status($this->status)
												 ->lang($this->lang)
												 ->result();

		$value = array("Name"   => $this->Name,
					   "Text"   => $this->Text,
					   "Seo"    => $this->Seo,
					   "Url"    => $this->Url,
					   "Status" => $this->Status);
																			
		if($validate == 1){
			$Db = $this->MySQL->table('subpage')->insert($value);
		}

	 return array($Db, $error, $value);	
	}

	private function update(){
	
		list($validate, $error) = $this->ValiData->strlen_min($this->name, 'Názov', '5')
												 ->strlen_min($this->text, 'Text', '5')
												 ->strlen_min($this->seo[0], 'Title', '5')
												 ->strlen_min($this->seo[2], 'Description', '5')
												 ->status($this->status)
												 ->lang($this->lang)
												 ->idexists($this->id, 'subpage')
												 ->result();	

		if($validate == 1){

			$Db = $this->MySQL->table('subpage')->where('id=:id', $where = array("id" => $this->id))
												->update($value = array("Name" 	=> $this->name,
																	 	"Text" 	=> $this->text,
																	 	"Seo" 	=> $this->seo,			 	   
																	 	"Status"=> $this->status
																		));	
		 	
		}	

	 $value = array_merge($value,$where);

	 return array($Db, $error, $value);		
	}

	private function delete(){

		list($validate, $error) = $this->ValiData->idexists($this->id, 'subpage')->result();

		if($validate == 1){
			$Db = $this->MySQL->table('subpage')->where('id=:id',$where = array("id" => $this->id))->delete();	
		}	
	 return array($Db, $error);			
	}

	private function result($id,$delete){
		$pocet = 1;
		$Db = $this->MySQL->table('subpage')->select()->resultset();

		$result  = '<table>
						 <th>
						  <td>#</td>
						  <td>Názov</td>
						  <td></td>
						 </th>';
		foreach($Db as $value){
			$result .= '<tr>
						  <td>'.$pocet++.'</td>
						  <td>'.$value['Name'].'</td>
						  <td>'.$edit.$delete.'</td>
						<tr>';
		}
		$result .= '.</table>.';
	 return $result;	
	}

	public function list($id, $action){

		if($action == "result"){
			$result = Text::result($id,null);
		}

		if($action == "insert"){
			if($_SERVER['REQUEST_METHOD'] == Post){
				$insert = Text::insert();	
				$result = $this->Form->text($insert);				
			}else{
				$result = $this->Form->text(null);	
			}	
		}

		if($action == "update"){
			if($_SERVER['REQUEST_METHOD'] == Post){
				$update = Text::update();
				$result = $this->Form->text($update);				
			}else{
				$update = $this->MySQL->table('admin')->where('id=:id',$where = array("id" => $id))->select()->single();
				$result = $this->Form->text($update = array("Db"    => null, 
													   		"error" => null, 
													   		"value" => array("Name"   => $update['Name'],
					   														 "Text"   => $update['Text'],
					   														 "Seo"    => $update['Seo'],		
					  														 "Status" => $update['Status'])
													  		));
			}				
		}

		if($action == "delete"){
			$delete  = Text::delete();	
			$result .= Text::result($id,$delete);		
		}

		if($action == "result"){
			$result = Text::result($id,null);	
		}

	 return $result;		
	}

}	


?>

napr. Text::result som volal funkciu v tej istej triedy...

Nahlásit jako SPAM
IP: 178.41.192.–
Kit+15
Guru
12. 4. 2020   #4
-
0
-

#3 Zelenac14
Ano.

Nahlásit jako SPAM
IP: 46.135.28.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zelenac140
Newbie
12. 4. 2020   #5
-
0
-

Tak ako mám zavolať funkciu ktorá sa nachdáza v tej istej triede?

Nahlásit jako SPAM
IP: 178.41.192.–
KIIV
~ Moderátor
+43
God of flame
13. 4. 2020   #6
-
0
-

#5 Zelenac14
stejne jako pristupujes k promennejm: $this->update()

Nahlásit jako SPAM
IP: 78.80.21.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý