Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odbiór zmiennej z funkcji problem
Forum PHP.pl > Forum > Przedszkole
darney
Robie prosty system do zarządzania szablonami. Uczę się dopiero wszystkiego i mam mały problem. W szablonie nie mogę odebrać z jednej funkcji zmiennej
Struktura.

Jak zrobić by funkcja showContent() widziała zmienne z funkcji showSession() w jednym szablonie

Jak w funkcji showSession() zadeklaruję zmienna $test="jakis tekst"; to robiąc w funkcji showContent() echo $test; nie widzę wartości tej zmiennej. Proszę o nakierowanie mojego złego myślenia jak to rozwiązać smile.gif

index.php
  1. require_once( dirname(__FILE__) . '/functions.php' );
  2. require_once( dirname(__FILE__) . '/templates/nazwa szablonu/index.php' );


szablon
  1. <? showSession(); ?>
  2.  
  3.  
  4. <!doctype html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <link rel="stylesheet" href="<?php serverSrc(); ?>/templates/nazwa-szablonu/style/main.css" />
  8. <title>Hello, HTML5!</title>
  9. </head>
  10. <body>
  11. <div id="header">
  12. </div>
  13. jakas oprawa<BR><BR>
  14.  
  15. <? showContent(); ?>
  16.  
  17. </body>
  18. </html>
  19.  


function.php (obsługujący przyjazne adresy url i zapomocą którego wywołuję strony które ładowane są do funkcji

  1. define('BASER_PATH', dirname(realpath(__FILE__)) . '/');
  2. include BASER_PATH . 'classes/simpleUrl.php';
  3.  
  4. function serverSrc() {
  5. echo 'http://'. $_SERVER['SERVER_NAME'];
  6. }
  7.  
  8. function showSession() {
  9. //includ wiadomo
  10. $url = new simpleUrl('/'); //tworzenie nowego obiektu z klasy simpleURL
  11. $page = $url->segment(1);$page2 = $url->segment(2);$page3 = $url->segment(3);$page4 = $url->segment(4);$page5 = $url->segment(5);$page6 = $url->segment(6);$page7 = $url->segment(7);
  12.  
  13. if (!$url->segment(1))
  14. $page = 'start';
  15. else
  16. $page = $url->segment(1);
  17.  
  18. switch ($page) {
  19. case 'start' :
  20.  
  21. include 'view/includePHPBB/sessionPHPBB.php';
  22. break;
  23. default :
  24. include 'view/includePHPBB/sessionPHPBB.php';
  25. break;
  26. }
  27. }
  28.  
  29. function showContent() {
  30. $sid=$_GET['sid'];
  31. //includ wiadomo
  32. $url = new simpleUrl('/'); //tworzenie nowego obiektu z klasy simpleURL
  33. $page = $url->segment(1);$page2 = $url->segment(2);$page3 = $url->segment(3);$page4 = $url->segment(4);$page5 = $url->segment(5);$page6 = $url->segment(6);$page7 = $url->segment(7);
  34.  
  35. if (!$url->segment(1))
  36.  
  37. $page = 'start';
  38. else
  39. $page = $url->segment(1);
  40.  
  41. switch ($page) {
  42.  
  43. case 'start' :
  44. case isset ($_GET['sid']):
  45. include 'view/main.php';
  46. break;
  47. default :
  48. include "view/404.php";
  49. break;
  50. }
  51. }
maniana
Zastosuj programowanie obiektowe, funkcje w odrębie jednej klasy mają dostęp do swoich zmiennych.
Przykład
darney
Nie znam się za dobrze na obiektowości i próbuje przerobić swoją klase


Chcę wydobyć zmienną która includuję się do funkcji z innego pliku

w showSession() includuje się plik main.php i wszytko działa dobrze. Tam jest zmienna $test="jakis tekst";

chce showContent() wydobyć w innym includzie test.php ta zmienna $test poprzez echo$test

Widzę że da rady to zrobić za pomocą przykładu który przedstawiłeś
echo $GLOBALS["zmienna"];

tylko teraz nie potrafię sobie tego wyobrazić jak obiektowo to wywoływać przy moich includach


main.php
  1. <?$test="testowa zmienna w sesji";?>

test.php
  1. <? echo "$test"; ?>



  1. require_once 'classes/simpleUrl.php';
  2. class displayTemplate {
  3.  
  4. public function showSession () {
  5. $url = new simpleUrl('/'); //tworzenie nowego obiektu z klasy simpleURL
  6. $page = $url->segment(1);$page2 = $url->segment(2);$page3 = $url->segment(3);$page4 = $url->segment(4);$page5 = $url->segment(5);$page6 = $url->segment(6);$page7 = $url->segment(7);
  7.  
  8. $sid=$_GET['sid'];
  9. //includ wiadomo
  10.  
  11.  
  12. if (!$url->segment(1))
  13.  
  14. $page = 'start';
  15. else
  16. $page = $url->segment(1);
  17.  
  18. switch ($page) {
  19.  
  20. case 'start' :
  21. case isset ($_GET['sid']):
  22. require_once 'view/main.php';
  23. break;
  24. default :
  25. include "view/404.php";
  26. break;
  27. }
  28. }
  29.  
  30. public function showContent () {
  31. $url = new simpleUrl('/'); //tworzenie nowego obiektu z klasy simpleURL
  32. $page = $url->segment(1);$page2 = $url->segment(2);$page3 = $url->segment(3);$page4 = $url->segment(4);$page5 = $url->segment(5);$page6 = $url->segment(6);$page7 = $url->segment(7);
  33.  
  34. $sid=$_GET['sid'];
  35. //includ wiadomo
  36.  
  37.  
  38. if (!$url->segment(1))
  39.  
  40. $page = 'start';
  41. else
  42. $page = $url->segment(1);
  43.  
  44. switch ($page) {
  45.  
  46. case 'start' :
  47. case isset ($_GET['sid']):
  48. require_once 'view/test.php';
  49. break;
  50. default :
  51. include "view/404.php";
  52. break;
  53. }
  54. }
  55.  
  56.  
  57.  
  58. }


szablon
  1. <? require_once 'classes/displayTemplate.php'; ?>
  2. <? $display = new displayTemplate();?>
  3. <? $display->showSession(); ?>
  4.  
  5.  
  6. <!doctype html>
  7. <html>
  8. <head>
  9. <meta charset="UTF-8">
  10. <link rel="stylesheet" href="/templates/szablon/style/main.css" />
  11. <title>Hello, HTML5!</title>
  12. </head>
  13. <body>
  14. <div id="header">
  15. </div>
  16. jakas oprawa<BR><BR>
  17. <? $display->showContent(); ?>
  18.  
  19.  
  20. </body>
  21. </html>
maniana
Było by to coś takiego:
  1. class mojaKlasa {
  2.  
  3. private $url;
  4. private $sid;
  5. private $pages = array();
  6.  
  7. public function _construct() {
  8. $this->url = new simpleUrl('/');
  9.  
  10. $i = 7;
  11. while($i>0){
  12. $this->pages[$i] = $this->url->segment($i);
  13. $i--;
  14. }
  15.  
  16. if(!$this->url->segment(1)) $this->pages[0] = 'start';
  17. else $this->pages[0] = $this->url->segment(1);
  18.  
  19. }
  20.  
  21. public function serverSrc() {
  22. return 'http://'. $_SERVER['SERVER_NAME'];
  23. }
  24.  
  25. public function showSession() {
  26. switch($this->pages[0]) {
  27. case 'start' :
  28. return 'view/includePHPBB/sessionPHPBB.php';
  29. break;
  30. default:
  31. return 'view/includePHPBB/sessionPHPBB.php';
  32. break;
  33. }
  34. }
  35.  
  36. public function showContent() {
  37. $this->sid = $_GET['sid'];
  38. switch($this->pages[0]) {
  39. case 'start' :
  40. case isset($this->sid):
  41. return 'view/main.php';
  42. break;
  43. default:
  44. return "view/404.php";
  45. break;
  46. }
  47. }
  48.  
  49. }

Użycie:
  1. $c = new mojaKlasa();
  2.  
  3. echo $c->serverSrc();
  4.  
  5. include $c->showSession();
  6. include $c->showContent();
darney
Wszystko fajnie chodzi ale includue na stałe niezależnie jaki URL wpisze.
maniana
To już musisz sobie w funkcjach posprawdzać czy zmienne dobrze tam widać i co zwracają.
darney
Nie mam pojęcia jak zacząć to w ogóle sprawdzać. Dopiero zaczynam przygodę z obiektowością
maniana
Sprawdzaj tak samo jak zwykłe funkcje. Pola kasy trzeba tylko zadeklarować na początku by były widoczne w metodach.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.