De fout is vrij simpel. Je geeft ERGENS een object mee ( je PclZip object ) waar eigenlijk een string verwacht wordt. Er zit geen standaard return waarde voor een String in. Als je de juiste regelcode aan ons geeft, kunnen we eens kijken waar je de fout in gaat.
?
Onbekende gebruiker
15-12-2010 20:04
- Aar - op 15/12/2010 19:09:55
Ik tel geen 59 regels code in je script.
Require is een vorm van include. Het enige verschil is dat require verplicht is (het script stopt als er wat mis is), bij include is dat niet het geval.
Zoals de naam al zegt wordt er bij een include het bestand opgenomen. De aantal regels van de include moet je dus vanaf de plek van de include optellen.
Is er op regel 2 van bestand A een include van 2 regels? Dat betekend dan dat de volgende regel van bestand A op regel 5 staat. Eerst stond de volgende regel op regel 3. Toen zijn er 2 regels bij gekomen. 2+3 = 5.
Nog even een voorbeeldje van hoe __toString():
<?php
class TestClasseZonderToString {
public $blaat;
function __construct($blaat) {
$this->blaat = $blaat; // Veld zetten
}
}
class TestClassMetToString extends TestClasseZonderToString {
function __construct($blaat) {
parent::__construct($blaat);
}
public function __toString()
{
return $this->blaat;
}
}
$oMetToString = new TestClassMetToString('Blaat');
$oZonderToString = new TestClasseZonderToString('blup');
echo $oMetToString;
echo $oZonderToString;
/* Dit levert:
Blaat
( ! ) Catchable fatal error: Object of class TestClasseZonderToString could not be converted to string
*/
?>
Ik had een stukje van de code weg gehaald om het overzichtelijker te maken, maar dat was dus duidelijk geen goed idee. Bij deze is het bestand bovenaan terug het volledige bestand.
Hieronder ook het stukje in de pclzip.lib library waar ik denk dat het fout gaat.
[code="php"]
<?php // ----- Init
$v_string_list = array();
$v_att_list = array();
$v_filedescr_list = array();
$p_result_list = array();
// ----- Look if the $p_filelist is really an array
if (is_array($p_filelist)) {
// ----- Look if the first element is also an array
// This will mean that this is a file description entry
if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
$v_att_list = $p_filelist;
}
// ----- The list is a list of string names
else {
$v_string_list = $p_filelist;
}
}
// ----- Look if the $p_filelist is a string
else if (is_string($p_filelist)) {
// ----- Create a list from the string
$v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
}
// ----- Invalid variable type for $p_filelist
else {
PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
return 0;
}?>
[/code]
?
Onbekende gebruiker
16-12-2010 11:05
Zie regel 59 (zoals de error aangeeft) van jou script.
Zie dan mijn voorbeeld.
En concludeer dan dat wat je doet niet klopt.
De PclZip klasse heeft geen magic __toString methode.
Thanks Karl! Ik ga nog eens een poging doen. Ik was eigenlijk gewoon iets basis aan het programmeren om een beetje te oefenen, maar uiteraard weer te ver gegaan. Ik zit nu iets verder dan mijn vaardigheden me toelaten, maar uiteraard wil ik nu wel de oplossing zien... .
[size=xsmall]Toevoeging op 16/12/2010 11:29:09:[/size]
Ok, hier kom ik niet uit. Heb op php.net opgezocht wat de magic __toString methode doet en dan geprobeerd deze in mijn pclzip.lib.php file te plaatsen, maar dit maakt het precies erger. Simpelweg: dit is nog te moeilijk voor mij.
Enige kans dat je even kunt zeggen wat ik precies moet doen, dan is het tenminste afgewerkt zoals ik het gehoopt had.