Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  PHP klassid ja include märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 21.08.2008 22:57:27 PHP klassid ja include vasta tsitaadiga

config.php:
php:
  1. <?php
  2.  
  3. $config = '123';
  4.  
  5. ?>


test.php:
php:
  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. class test {
  6.  
  7.    var $config = $config???
  8.  
  9. }
  10.  
  11. ?>

Ehk siis kuidas ma saaksin includitud muutujad klassi?

Terv, beer_yum.gif
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
i8080
Kreisi kasutaja
i8080

liitunud: 15.03.2002



Autoriseeritud ID-kaardiga

sõnum 22.08.2008 08:44:18 vasta tsitaadiga


<?php
  var $config = '456';
  // algväärtus on 456
  include('config.php');
  // uus väärtus on '123';

  class test
  {
  }
?>
Kommentaarid: 169 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 151
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 22.08.2008 09:14:18 vasta tsitaadiga

php:
  1. <?php
  2. define('CONFIG', 123);
  3. class test
  4. {
  5.         echo CONFIG;
  6. }
  7. ?>
  8.  

defineeringu võid teisest failist includega sikutada soovi korral
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 22.08.2008 11:45:13 vasta tsitaadiga

Just olekski vaja teada saada kuidas ma seda sikutan? Mul on ju kaks PHP faili.

Arvan, et proovisin seda, ja mäletamist mööda sain errori.
sick1 kirjutas:
php:
  1.  
  2. <?php
  3.   var $config = '456';
  4.   // algväärtus on 456
  5.   include('config.php');
  6.   // uus väärtus on '123';
  7.  
  8.   class test
  9.   {
  10.   }
  11. ?>
  12.  
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 22.08.2008 12:04:13 vasta tsitaadiga

php:
  1. <?php
  2. define('CONFIG', 123);
  3. ?>

php:
  1. <?php
  2. class test
  3. {
  4.         private $config = CONFIG;
  5.        
  6.         function kaja()
  7.         {
  8.                 echo $this->config;
  9.         }
  10. }
  11. $foo = new test();
  12. $foo->kaja();
  13. ?>
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 22.08.2008 13:32:08 vasta tsitaadiga

Tänud icon_smile.gif
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
kapa24
HV vaatleja

liitunud: 23.01.2003




sõnum 23.08.2008 11:25:12 vasta tsitaadiga

tyyp88 kirjutas:
Tänud icon_smile.gif


Üks võimalus veel:
php:
  1.  
  2. $config = 123;
  3.  


php:
  1.  
  2. class test {
  3.     private $config = $GLOBALS['config'];
  4. };
  5.  
tagasi üles
vaata kasutaja infot saada privaatsõnum
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 23.08.2008 12:30:52 vasta tsitaadiga

Terv,

On t6esti v6imalus, aga arvan, et konfiguratsiooni parameetrid v6iksid j22da konstantseteks. icon_smile.gif

On veel mingeid trikke kuidas keegi n2iteks kirjutab ja loeb sisse konfiguratsiooni faili?
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
iceincube
HV veteran
iceincube

liitunud: 18.11.2005




sõnum 23.08.2008 13:05:28 vasta tsitaadiga

klopsisin kiirelt kokku oma failikogust.. vbla on süntaxi vigasi ka..
töötab siis alates php5

registry.php

<?php
class registry {
  protected static $_instance = null; 
  protected $_arrData = array(); 

  public static function getInstance() {
      if (self::$_instance === null) {
          self::$_instance = new self();
      }

      return self::$_instance;
  }

  static function set($strName, $data) { 
    $instance = self::getInstance();
    $instance->_arrData[$strName] = $data;
    return true;
  }

  static function get($strName) {
    $instance = self::getInstance();
    if(isset($instance->_arrData[$strName])) {
      return $instance->_arrData[$strName];
    } else {
      return false;
    }
  } 
}


config.php
$muutuja = 'see on tähtis muutuja nüüd';

require_once('registry.php');
registry::set('tahtismuutuja', $muutuja);



test.php
require('config.php');

class test {
  public function kuva(){
    echo registry::get('tahtismuutuja');
  }
}

$objTest = new test();
$objTest->kuva();
Kommentaarid: 39 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 37
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 23.08.2008 18:54:39 vasta tsitaadiga

tyyp88 kirjutas:
On veel mingeid trikke kuidas keegi n2iteks kirjutab ja loeb sisse konfiguratsiooni faili?


Ma reeglina väldin konfifailis hulga muutujate või konstantide defineerimist. Pigem defineerin seal ühe massiivi, milles siis kõik konfiguratsiooniseaded kirjas on:

php:
  1. <?php
  2. $CONF = array(
  3.     "username" => "Mihkel Muhkel",
  4.     "password" => "f1s63a",
  5.     "port" => 80,
  6. );
  7. ?>


Või siis kirjutan konfifaili üldse standardse konfifaili süntaksiga ja parsin selle ise:

# meie tubli kasutaja
username="Mihkel Muhkel"
password=f1s63a

port=80 # http
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 23.08.2008 21:57:21 vasta tsitaadiga

nene, kuidas sa nüüd selle array t6mbaksid klassi sisse?
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 23.08.2008 22:41:20 vasta tsitaadiga

Ilmselt peaks selle eest vastutama mõni selle klassi meetod:

php:
  1. <?php
  2.  
  3. class Conf {
  4.     private $conf;
  5.  
  6.     /**
  7.      * Laeb konfiguratsiooni etteantud failist
  8.      */
  9.     function load($filename) {
  10.         include($filename);
  11.         $this->conf = $CONF;
  12.     }
  13.  
  14.     /**
  15.      * get-meetodid kõigi konfiguratsioonifailis olevate seadete
  16.      * kohta.
  17.      */
  18.     function __call($method, $args) {
  19.         if (preg_match('/^get(.*)/', $method, $matches)) {
  20.             return $this->conf[strtolower($matches[1])];
  21.         }
  22.     }
  23. }
  24.  
  25. $conf = new Conf();
  26. $conf->load("conf.php");
  27. echo $conf->getUsername();
  28. echo $conf->getPassword();
  29. echo $conf->getPort();
  30.  
  31. ?>
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
raul72
HV kasutaja
raul72

liitunud: 23.03.2006




sõnum 13.09.2008 21:51:06 vasta tsitaadiga

veel üks võimalus:

config.inc:
php:
  1. $config = array(
  2.     'var1' => 'foo',
  3.     'var2' => 'bar',
  4. );

class
php:
  1. class foo {
  2.     var $var1 = 'default value';
  3.     var $var2 = 'default value';
  4.     function bar() {
  5.          include 'config.inc';
  6.          foreach ($config as $var => $value) {
  7.              $this->$var = $value;
  8.          }
  9.     }
  10. }

ja siis klassis on juures erinevad checkid et midagi katki ei läheks ja ka config faili valimine

_________________
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 10
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
iceincube
HV veteran
iceincube

liitunud: 18.11.2005




sõnum 13.09.2008 21:58:14 vasta tsitaadiga

Tegelikult peaks klasssile passima muutujad läbi tema mingi kindla meetodi, mitte, et klassi ise võtab.
Vähemalt tundub nii õigem,
mingile globaalsele muutujale "lootma" jääda oelks ju tgl vale?


viimati muutis iceincube 13.09.2008 22:03:34, muudetud 1 kord
Kommentaarid: 39 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 37
tagasi üles
vaata kasutaja infot saada privaatsõnum
sander85
HV kasutaja
sander85

liitunud: 30.09.2007




sõnum 13.09.2008 21:59:21 vasta tsitaadiga

raul72 kirjutas:
veel üks võimalus:

config.inc:
php:
  1. $config = array(
  2.     'var1' => 'foo',
  3.     'var2' => 'bar',
  4. );

class
php:
  1. class foo {
  2.     var $var1 = 'default value';
  3.     var $var2 = 'default value';
  4.     function bar() {
  5.          include 'config.inc';
  6.          foreach ($config as $var => $value) {
  7.              $this->$var = $value;
  8.          }
  9.     }
  10. }

ja siis klassis on juures erinevad checkid et midagi katki ei läheks ja ka config faili valimine


miks mitte lugeda algne konf sisse selle funktsiooni abil: http://ee2.php.net/function.parse-ini-file

ja hiljem hoida muutujate väärtusi näiteks sessioonis ning luua funktsioonid nende lugemiseks ja neisse kirjutamiseks

_________________
Think of how stupid the average person is, and realize half of them are stupider than that.
-- G. Carlin
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
raul72
HV kasutaja
raul72

liitunud: 23.03.2006




sõnum 13.09.2008 22:31:12 vasta tsitaadiga

iceincube, urr, kuidas nõnna, see tähendaks et igas entry poindis (kohas kust hakatakse klassisüsteemiga suhtlema) peaks olema koodiloogika mis loeb confi ja passib need klassile?
p.s arvestades et fail milles muutuja $config defineeritakse includetakse funktsioonis (ja eeldades et tegeled globals=off) siis ei ole ta globaalne muutuja

sander85, hea et meelde tuletasid - ini parse on ülilahe asi icon_biggrin.gif thumbs_up.gif

_________________
Kommentaarid: 13 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 10
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 17.09.2008 00:48:08 vasta tsitaadiga

raul72 kirjutas:
iceincube, urr, kuidas nõnna, see tähendaks et igas entry poindis (kohas kust hakatakse klassisüsteemiga suhtlema) peaks olema koodiloogika mis loeb confi ja passib need klassile?


Sugugi mitte. Ühes kohas initsialiseerid objekti vajalike muutujatega ja siis järgmistes kasutad juba seda initsialiseeritud objekti. (Või kui sa mõtled entry pointide all eraldi PHP faile, mille poole veebist saab pöörduda, siis neis peaks igaühes nagunii olema mingi pöördumine funktsiooni poole, mis teostaks kõigi entry pointide jaoks ühiseid toiminguid.)

Pealegi, miks peaks üldse üks klass olema teadlik sellest, kus talle vajalik konfiguratsioon täpselt asub? See piirab oluliselt selle klassi kasutusvõimalusi. Võibolla tekib vajadus kasutada ühes kohas ühte ja teises kohas teist konfiguratsiooni. Päris kindlasti on see kasulik testimisel - katsetamaks erinevate konfiguratsiooniseadete mõju ilma et peaks minema konfifaili ennast näppima.
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  PHP klassid ja include
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.