class met require mode

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kumkwat Trender

Kumkwat Trender

07/07/2008 22:09:00
Quote Anchor link
Hoi iedereen,

ik maak een kleine cms bestand..
nu heb ik een probleempje en kan er niet echt mee verder.

Nou weten jullie dat als je een variable hebt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$test
= "dit is een test";
?>

en een andere pagina laad door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
require("bla.php");
?>

de variable $test doorgestuurd word.

wanneer we bij bla.php zoiets hebben
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $test"; ?>
zullen we "dit is een test" zien...

nou heb ik een kleine class scriptje gemaakt
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
class doe()
 function
libary($url) {
   require($SITEPATH."libary/".$url.$EXT);
  }
}


$header = "appel";
$text = "peer";
$footer = "whatever";

$voer = new doe();
$voer->libary("bla");
?>


bla.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? echo $header . $text . $footer; ?>


KRIJG IK NIETS DOORGESTUURD :S

nou kan ik dit oplossen door alle variabelen een voor een door te geven naar de volgende pagina.. en dit is niet zo handig vind ik.
nou heb ik de hele dag niets kunnen vinden behalve zo een obj_create flush methode die helaas geen effect bij mijn hosting heeft.

effe een voorbeeldje hoe dat eruit ziet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
ob_start();

if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE) {
    echo eval('?>'.preg_replace("/;*\s*\?>
/", "; ?>", str_replace('
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?=', '<?php echo ', file_get_contents($_ci_path))));
} else {
 include($_ci_path);
}

log_message('
debug', 'File loaded: '.$_ci_path);


if ($_ci_return === TRUE) {        
    $buffer = ob_get_contents();
    @
ob_end_clean();
    return $buffer;
}

if (ob_get_level() > $this->_ci_ob_level + 1) {
    ob_end_flush();
}
else {
    global $OUT;
    $OUT->append_output(ob_get_contents());
    @
ob_end_clean();
}
}

?>


hoe kan ik het anders aanpakken..
p.s. de class moet ik eerder uitvoeren dan de variabelen..
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
PHP hulp

PHP hulp

22/12/2024 07:45:19
 
Kumkwat Trender

Kumkwat Trender

08/07/2008 18:13:00
Quote Anchor link
niemand een ideetje?
 
Lode

Lode

08/07/2008 18:30:00
Quote Anchor link
ga eens kijken naar define(); werkt een stuk beter als je procedureel allerlei files gaat includen. of je moet het in $_GLOBAL stoppen ofzo...

en ob_start(); is een lekke band plakken met ducktape!
Leer jezelf fatsoenlijk programmeren aan zou ik zeggen...
Gewijzigd op 01/01/1970 01:00:00 door Lode
 
Kumkwat Trender

Kumkwat Trender

08/07/2008 18:48:00
Quote Anchor link
geef is een klein voorbeeldje want ik snap niet echt hoe je dat gaat flikken met define :S
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Crispijn -

Crispijn -

08/07/2008 18:58:00
Quote Anchor link
ik had laatst hetzelfde probleem en ik heb het toen ook met define() opgelost.

definieer je variabelen zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
define(je_variabelenaam, 'hier de inhoud');
?>


en haal het op

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo je_variabelenaam;
?>


Veel succes ermee!
 
Emmanuel Delay

Emmanuel Delay

08/07/2008 20:30:00
Quote Anchor link
Het is niet echt de bedoeling globale variabelen in classes te gebruiken.

Als je iets nodig hebt binnen een class, geef het dan gewoon mee, bv. in een method die je er speciaal voor maakt.
 
Kumkwat Trender

Kumkwat Trender

08/07/2008 21:43:00
Quote Anchor link
kan ik misschien meer inzicht vragen? want ik vat nog steeds niet hoe ik het met define in elkaar zou moeten zetten..
 
Crispijn -

Crispijn -

08/07/2008 22:34:00
Quote Anchor link
Je hebt echt precies hetzelfde probleem als dat ik had. Ik heb het zo opgelost.

globaal:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function Load(){
    if(file_exists($this->Config['root'].$this->padMode.'/components/'.$this->Pages[$this->Mode][$Page]['php'])){
        require($this->Config['root'].$this->padMode.'/components/'.$this->Pages[$this->Mode][$Page]['php']);
    }
else{
        $this->setError('Component file not found');
    }
}

?>


Dit natuurlijk mooi naar je eigen situatie ombuigen. Page en mode zijn bij mij variabelen die in de constructor worden meegegeven.

Ik heb ook nog een controle ingebouwd of het bestand dat dmv een get wordt opgevraagd wordt wel in het array $this->Pages staat. Zoniet, dan wordt een default pagina geladen.

Je kan dan in deze functie Load aan de haal met variabelen die dus in een bestand staan gedefineerd met define... Welke foutmeldingen krijg je allemaal want ik weet nu niet wat je allemaal al geprobeerd hebt...
 
Kumkwat Trender

Kumkwat Trender

09/07/2008 00:39:00
Quote Anchor link
probleem is dat ik niet de variabelen doorgestuurd krijg.
ik krijg dan als ik echo $test; heb dat ie test niet gevalideerd heeft.

owkee omdat jij een stukje code wilt hebben heb ik een voorbeeld code gemaakt...

index.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
define(EXT, ".php");
require_once("openurl.php");
$voer = new view();
require("voeruit.php");
?>


openurl.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
class view {
 function
help($url) {
   require_once("help/".$url.EXT);
 }
 function
libary($url) {
   require_once("libary/".$url.EXT);
 }
}

?>


voeruit.php

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
$header
= "appel";
$text = "peer";
$footer = "whatever";

$voer->libary("test");
$voer->help("test");
?>


--
help/test.php
--
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
echo $header;
echo "<hr>";
echo $text . $footer;
?>

--
libary/test.php
--
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
echo $header . " en " . $text;
?>


nou herhaal ik opnieuw dat ik niet na elke variable aan wil geven waar die naar toe moet. dus als bij bijvoorbeeld help/test.php de variabelen
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
echo $header;
echo "<hr>";
echo $text . $footer;
?>

header footer en text nodig is dat ik niet een voor een dat aan wil geven.

misschien had je hier wat aan?
edit: nu ik je account heb bekeken en een paar forum berichten heb gelze snap ik er meer over http://phphulp.nl/forum/showtopic.php?cat=15&id=50338
ik moet alles van te voren dus aangeven dat ik ze gebruik alleen geen idee hoe :P.
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Martiveen -

Martiveen -

09/07/2008 00:46:00
Quote Anchor link
Ik weet niet of ik nu iets heel doms zeg. Maar classes maken gebruik van hun eigen variabelen. Alles wat buiten een class gedefineerd is. Kan een class niks mee, omdat hij simpel weg niet weet dat ze er zijn. Je moet dus zorgen dat de variabelen ook binnen de class bekend zijn.
 
Kumkwat Trender

Kumkwat Trender

09/07/2008 00:51:00
Quote Anchor link
je zegt iets goed :P (teminste het klonk goed) daar kwam ik 2 seconde geleden er ook achter :P
nu kijke hoe ik dat doe; voorbeeldje kan geen kwaad :)
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Emmanuel Delay

Emmanuel Delay

09/07/2008 12:20:00
Quote Anchor link
Daar is uiteraard een goede reden voor he.
Object geörienteerd werken heeft zo zijn gevolgen.

Eén van die gevolgen is inderdaad dat het niet de bedoeling is dat variabelen van buitenaf invloed hebben op het object en vice versa.

Wil je een waarde meegeven aan een class, maak dan een methode die daar speciaal voor dient. Je kan ook rechtstreeks de variabelen aanspreken, bv:
$object->breedte = $breedte;
 
Kumkwat Trender

Kumkwat Trender

09/07/2008 16:23:00
Quote Anchor link
ok is niet echt gelukt maar ik heb wat anders toegepast :S

index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?
define(EXT, ".php");
require_once("openurl.php");
require("voeruit.php");
?>

openurl.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
class view {
    function
libary($url, $html="") {
        if(isset($html)) {
                   if (is_array($html)) {
                         foreach($html as $key => $value) {
                    $$key = $value;
                }
            }
        }

    require_once("libary/".$url.EXT);
    }
}

?>

voeruit.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?
$html
[header] = "Head";
$html[text] = "text";
$html[footer] = "grote voet";

$voer = new view();
$voer->libary("bla",$html);
?>

bla.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
echo $header;
echo "<hr>";
echo $text;

echo "<br>";
echo $footer;
?>


maar ja mijn bedoeling is om niet aan te geven wat mee moest
dus dan zou ik zoiets krijgen
in plaats van dit
$voer->libary("bla",$html);
dit
$voer->libary("bla");
met dezelfde output.. maar ja
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Crispijn -

Crispijn -

09/07/2008 16:32:00
Quote Anchor link
Wat is dan uiteindelijk je grote voordeel van deze oplossing (als die werkt?)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.