Toon posts:

[php] Overerfing classes

Pagina: 1
Acties:
  • 36 views sinds 30-01-2008

Verwijderd

Topicstarter
Als ik hieronder staande code laat uitvoeren dan krijg ik

Warning: array_search(): Wrong datatype for second argument in

Ik weet dat het te maken heeft met dat het iets met overerfing te maken heeft.

Dit in function Blok() zetten:

$this->cTemplate();

<b>Krijg ik geen foutmelding maar ook geen uitvoer want pagina wordt wel ingelezen maar niet vervangen en de uitvoer wordt niet gegeven
<b>
Aanroep:

$blok1 = new Blok();

$blok1->SetBlokname('textblok');

$blok1->SetBlok('Text' , '1 Werkt dit of werkt dit niet');
$blok1->SetBlok('Texta' , '2 Wat is er aan de hand');
$blok1->SetBlok('border' , '"2"');

echo $blok1->ContentBlok();


Template.php


<?
class Blok extends cTemplate
{


////////////////////////////////////////////
// Constructor, deze functie wordt altijd automatisch aangeroepen
// bij het maken van een object
//
function Blok()
{

}

Function SetBlokname($bBlokname)
{
$bBlokname = 'blokken/' . $bBlokname . ".mtp";
$this->setFileName($bBlokname);
}

Function SetBlok($pmPattern, $pmVal)
{
$this->setVal($pmPattern, $pmVal);
}

Function ContentBlok()
{
$this->getContents();
}
}


class cTemplate
{
var $sFilename;
var $aPlaceholders;
var $aReplacements;
var $sContent;

////////////////////////////////////////////
// Constructor, deze functie wordt altijd automatisch aangeroepen
// bij het maken van een object
//
function cTemplate()
{
$this->sFilename = '';
$this->sContent = '';
$this->aPlaceholders = array();
$this->aReplacements = array();
}


////////////////////////////////////////////
// Stel de naam van de template in
//
function setFileName($psFilename)
{
// Bestaat het bestand?
if (!file_exists($psFilename))
{
echo 'Template file '.$psFilename.' bestaat niet!';
return false;
}
else
{
$this->sFilename = $psFilename;
return true;
};
}

////////////////////////////////////////////
// Stel de vervangende waarde van een placeholder in
//
function setVal($pmPattern, $pmVal)
{
// Voeg een placeholder toe, maar alleen als hij nog niet bestond
// We willen uiteraard overschrijven, en niet toevoegen, want je kunt 1 placeholder
// toch maar met 1 waarde vervangen
//
$pmPattern = '['.$pmPattern.']';
$bFound = false;
$iPos = array_search($pmPattern, $this->aPlaceholders);

if ($iPos === FALSE)
{
$this->aPlaceholders[] = $pmPattern;
$this->aReplacements[] = $pmVal;
}
else
{
$this->aPlaceholders[$iPos] = $pmPattern;
$this->aReplacements[$iPos] = $pmVal;
}
}


////////////////////////////////////////////
// Lees het bestand, vervang de placeholders en geef de uitvoer terug
//
function getContents()
{
if (!$fp = fopen($this->sFilename, 'r'))
{
echo 'Could not open template';
return false;
}
else
{
$this->sContent = fread($fp, filesize($this->sFilename));
fclose($fp);
}

// Do the search and replace
//
$sContent = str_replace($this->aPlaceholders, $this->aReplacements, $this->sContent);

//Output the page
//

return $sContent;
}
}

?>

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Zou je je code in [ php ] hier je code [/ php ] tags willen zetten (zonder die spaties)? Lees een stuk gemakkelijker.

Verder: het is overerving, geen overerfing

Dit is toch gemakkelijk te debuggen, kijk eens naar deze regel:

$iPos = array_search($pmPattern, $this->aPlaceholders);

Als je daarvoor even var_dump($this->aPlaceholders); zet, weet je gelijk wat voor waarde deze heeft.

[ Voor 65% gewijzigd door Michali op 26-11-2004 10:50 ]

Noushka's Magnificent Dream | Unity


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 21:24

NMe

Quia Ego Sic Dico.

Die array_search heeft gewoon een array als argument nodig in de tweede parameter. Ik zie niet echt wat dat met overerving te maken moet hebben. Je moet gewoon een check inbouwen die kijkt of de variabele die je erin stopt wel een array is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:44

Creepy

Tactical Espionage Splatterer

Zie het commentaar hierboven en lees ook eens P&W FAQ - Leer **** debuggen!! door.

Dit is met zelf debuggen vrij simpel op te lossen :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Dit topic is gesloten.