PHP - Variabelen doen het niet in een ander bestand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

Bekijk vacature »

Jorn Reed

Jorn Reed

08/02/2018 02:18:20
Quote Anchor link
Hallo,

Ik heb een eigen router class in php gemaakt. De router class include ik op de index.php waar ik ook alle routes toevoeg. Bijvoorbeeld zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $route->add('/product/\d+', function(){ require_once 'pages/product.php' }) ?>


Ook heb ik een Model class voor al mijn database queries. Zoals in de code te zien, zie je dat ik het model object aanroep. Hoe kan het dat als ik het model object oproep doormiddel van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $model = new Model(); ?>
Dat ik de $model variabel niet kan gebruiken in bijvoorbeeld een bestand wat ik met die router functie require?

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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
  require_once 'classes/route.php';
  require_once 'classes/config.php';
  require_once 'classes/model.php';
  require_once 'functions.php';
  require_once 'classes/validator.php';
  
$route = new Route();
$db = new Db();
$model = new Model();

$route->add('/', function(){
  require_once 'pages/home.php';
});


$route->add('/tapijten', function(){
  require_once 'pages/products.php';
});


$route->add('/product/\d+', function($model){
  require_once 'pages/product.php';
});


$route->add('/contact', function(){
  require_once 'pages/contact.php';
});


$route->add('/admin', function(){
  require_once 'pages/admin.php';
});


$route->add('/login', function(){
  require_once 'pages/test.php';
});


$route->submit();
?>


In de product.php wat ik dus require in de index.php wil ik een query oproepen doormiddel van het $model variabel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    require_once 'inc/header.php';
    $uri = $_SERVER['REQUEST_URI'];
    $pin = explode('/', $uri);
    $id = $pin[3];

    $product = $model->selectById($id, 'carpet');
    $product = $product->fetch(PDO::FETCH_ASSOC);
?>
Het werkt alleen als ik bijvoorbeeld $model = new Model(); opnieuw aanroep. Wat ik dus gek vind omdat ik dat dus al in het hoofd bestand doe.
 
PHP hulp

PHP hulp

22/04/2019 23:06:42
Honeypot
 
Thomas van den Heuvel

Thomas van den Heuvel

08/02/2018 04:29:23
Quote Anchor link
En waar in je andere thread is er ondersteuning voor objecten in de callbackfunctie? Noch in de add() methode noch in call_user_func() in de submit() methode worden parameters doorgegeven? In die code zit waarschijnlijk ergens de fout.

De $params in @Robs code hebben betrekking op de matches van URI's en hebben dus (?) volgens mij niets te maken met de "object parameters" die jij probeert door te geven.

Weet je ook zeker dat de juiste methode wordt uitgevoerd?
Gewijzigd op 08/02/2018 04:39:55 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

08/02/2018 06:45:57
Quote Anchor link
@Thomas: in die vorige thread kun je aan de add() een string meegeven die dan in de afhandeling als class naam wordt gezien (zie regel 30 in mijn versie).

Wat je hier doet met /products klopt dus niet. De callback functie krijgt de matches uit de regex mee. Het feit dat je de parameter van de callback functie $model noemt betekent niet dat dat die $model van regel 10 is. Wil je het $model wel in de callback gebruiken, dan zul je 'm met 'use' mee moeten geven.

De params die ik in mijn aangepaste stukje code doorgeef aan de constructor komen uit de preg_match(). Wil je dat daar iets zinnigs in zit, dan zul je in de reg-ex groepering toe moeten passen (met haakjes):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$route->add('/product/(\d+)', function($params) use ($model){
  //het ID zit nu in $params[1]
  //$model bevat nu het op regel 10 aangemaakte Model
  require_once 'pages/product.php';
});
Gewijzigd op 08/02/2018 06:50:48 door Rob Doemaarwat
 
Ward van der Put
Moderator

Ward van der Put

08/02/2018 09:44:48
Quote Anchor link
Het eerste $product is een ander $product dan het tweede $product:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$product
= $model->selectById($id, 'carpet');
$product = $product->fetch(PDO::FETCH_ASSOC);
?>


Is $product zelf trouwens geen model en $model dan meer een mapper?

En waarom accepteert de selectById() niet alleen een $id maar ook de stirng 'carpet'? Die methode doet kennelijk twee verschillende dingen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$db
= new Db();
$model = new Model();
?>

Er is ergens een $db in omloop, maar waar komt die dan terug in je code?
Je lijkt in $product->fetch(PDO::FETCH_ASSOC) PDO te gebruiken, maar waar is dan de $db gebleven?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/02/2018 12:11:10
Quote Anchor link
Als je in PHP een bestand included dan moet je dat zien als een tekst bewerking.

voorbeeld:

index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function something() {
    require 'routes.php';
}


something();
?>


routes.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$routes
= 'blabla';
?>


Is het zelfde als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function something() {
    $routes = 'blabla';
}


something();
?>


De kneep zit m in het feit dat de variabele $routes dus aangemaakt wordt in de functie something. Deze variabele bestaat dus ook enkel en alleen binnen de functie something en niet er buiten.
 
Jorn Reed

Jorn Reed

08/02/2018 14:04:13
Quote Anchor link
Ik dacht simpelweg dat als ik een variabel aanmaak in het hoofdbestand index.php dat hij dan gewoon te gebruiken is in een ander bestand dat wordt geinclude op de index.php omdat hij dan technisch gezien nog steeds op de index.php wordt geprint alleen dan tussen de html van het geinclude bestand.
 
Ozzie PHP

Ozzie PHP

08/02/2018 23:49:57
Quote Anchor link
Het gaat er dus om dat de variabele $routes binnen een function staat, wat inhoudt dat die variabele daarbuiten niet bekend is.
 



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.