Archief - PHP: hoe kan ik een private method aanroepen in de class zelf?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Calvin

Legacy Member
Misschien een domme vraag maar het is een deel van een php probleem:
1) Hoe kan ik een private method aanroepen in de klasse zelf:
self::function() of this->function(); ??
2) Kan een non-static method een private static variabele van die class wijzigen?
Het doel:
De class moet onthouden hoeveel instances ervan gemaakt zijn, daarom de static variabele
De static variable wordt gebruikt in de __construct method om een unieke key toe te wijzen aan elke instance van die class.

hier is de class: (het relevante gedeelte toch)

<?php

class card
{
private $Card_owner_id;
private static $Card_total;
private $Card_game_id;

public function __construct()
{
self::createNewCard();
$this->Card_owner_id = 0;
}

private function createNewCard()
{
self::$Card_total++; //increment the static variable
$this->Card_game_id = self::$Card_total; //assign unique id
}

public function giveCardGameId()
{
return $this->Card_game_id;
}

public function giveCardTotal()
{
return self::$Card_total;
}
}
?>

Dit probeerde ik uit te voeren; het gaf geen error maar gewoon een leeg scherm:

<?php
for ($i = 0; $i < 10; $i++) {
$card[$i] = new card();
}
for ($i = 0; $i < 10; $i++) {
print "CardGameId: $card[$i]->giveCardGameId() : $card[$i]->giveCardTotal() <br />";
}
?>

Iemand een idee?
Alzeker bedankt.

killgore

Legacy Member
self::function() is voor statische functies.
$this is voor "gewone" functies.

PerfectPC

Legacy Member
an sich is er niets mis met je class, al kan ze een hoopje compacter geschreven worden. verder zit er een kanjer van een fout in je print regeltje :p
probeer het zo eens:
PHP:
<?php 
	class card { 
		private $Card_owner_id = 0; 
		private static $Card_total = 0; 
		private $Card_game_id; 
	
		public function __construct() { 
			$this->Card_game_id = ++self::$Card_total; //  increment the static variable & assign unique id
		} 
		
		public function giveCardGameId() { 
			return $this->Card_game_id; 
		} 
		
		public function giveCardTotal() { 
			return self::$Card_total; 
		} 
	} 

	for ($i = 0; $i < 10; $i++) { 
		$card[$i] = new card(); 
	} 
	for ($i = 0; $i < 10; $i++) { 
		print "CardGameId: ".$card[$i]->giveCardGameId()." : ".$card[$i]->giveCardTotal()." <br />"; 
	} 
?>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan