Armenian Knowledge Base

Armenian Knowledge Base (https://forum.armkb.com/)
-   Web Development (https://forum.armkb.com/web-development/)
-   -   PHP Class Define (https://forum.armkb.com/web-development/29473-php-class-define.html)

kernel 02.07.2007 08:56

PHP Class Define
 
Barev dzez hargeli forumi masnakicner, Programmerner!!!

Unem mi harc Class - eri veraberyal, shat shnorhakal klinem lselu xorhurdner, ognutyan kargov.

Unenq Class - class.php - um
############################
class.php

class user() {
var $usr;

function set_username ($name) {
$this->usr=$name;
} // end function

function get_username () {
return $this->usr;
} // end function

} // end class
#############################

unenq naev index.php, vortex haytararum enq object

index.php
#############################

require("class.php");
$u=new user();
$u->set_username ('Armen');
echo $u->get_username();

#############################

ays [email protected] haskanali e... bayts inchpes kareli e ogtvel classi objectneric mek ayl php fileum, orinak patkeracnenq vor ays index.php fileum classi $usr [email protected] stanum e arjeq... bayts ayd [email protected] mez petq e naev myus fileum.. asenq other.php - um.

Naxapes shnorhakalutyun!

CyberJoe 02.07.2007 09:24

uxxaki $u-n pet-q e global popoxakan lini vor karanas myus fileum el gres
$u->get_username();
mi qich indz tvuma konkret chi [email protected] nkaragrac. u class-i het henc bun kap chuni.

p.s
karoxa du uzum es et classic menak mek instance unenas? et depqum petqa ogtagorces singleton, byc indz tvuma stex ays [email protected] chi

kernel 02.07.2007 15:40

hargeli CyberJoe shat shnorhakal em xorhrdi hamar
 
shat shnorhakal em xorhrdi ev ognutyam hamar...

[email protected] nranum e, vor indz petq e ayd classi [email protected] pahel amboxch sessiai jamanak, aysinqn erb usr [email protected] stanum e arjeq, apa shrjelov tarber ejerum, es karoxanak stanal ayd [email protected] $u->get_user(); mijocov.

u mi nurb pah el ka :)

asenq unem config.php u $u=new user(); haytararum em config.php - um.
isk config.php bolor filerum require("config.php"); em anum.
inch anem config.php - um, erb $u=new user();araj [email protected] haskana vor $u arden haytararvats e?

Krknaki angam naxapes shnorhakalutyun!

kernel 02.07.2007 15:43

u ete kareli e, knkaragres inch e "singleton" @ ?

CyberJoe 02.07.2007 15:59

ha.. pastoren kez henc singletona petq :)

singletoni masin nayir aystex: http://en.wikipedia.org/wiki/Singleton_pattern

isk ko [email protected] henc saya:

PHP Code:

class User {
  
// object instance
  
private static $instance;
  
  private static 
$name;
 
  private function 
__construct() {}
 
  private function 
__clone() {}
 
  public static function 
getInstance() {
    if (
self::$instance === null) {
      
self::$instance = new User();
    }
    return 
self::$instance;
  }
 
  public function 
getName() {
    return 
$this->name;
  }
  
  public function 
setName($name) {
    
$this->name $name;
  }  
}
 

User::getInstance()->setName('Benjamin Linus');

$name User::getInstance()->getName(); 

aysinqn kez el $u popoxakan petq chi, mish kanchum es
User::getInstance(), ev nuyn popoxakannes stanum amentexic

AvDav 02.07.2007 16:17

А если ему надо создать несколько экземпляров класса Юзер? Тогда синглтон тут не применим. Не понимаю в чем проблема, просто создаешь обьект в конфиг.пхп и пользуешь в других файлах, что не получается то?

kernel 02.07.2007 17:12

CyberJoe jan, shat shnorhakal em...

AvDav;588549]А если ему надо создать несколько экземпляров класса Юзер? Тогда синглтон тут не применим. Не понимаю в чем проблема, просто создаешь обьект в конфиг.пхп и пользуешь в других файлах, что не получается то?[/quote]

skaju chto dorogoy AvDav! Tut takoe delo... skajem v konfig.php ya sozdayu $u = new user(); OK?
A v index.php $u->set_user('David'); OK?
i skajem na stronice index.php est link lala.php, pre perexode lala.php najatiem na ssilku, (bez get, i post) kak v filee lala.php mne poluchit $u->get_username();

esle ya v lala.php stavlyu require("config.php"); to pre kajdom require iz raznix fileov v config.php object $u obyavlyaetsa vse snova i snova, no mne on nujen lish pre pervoy obyavlenii. i eshcho obyavlenie i set funkcii klass u menya nezoviseni, toest iz raznix php fileov v site...

Blagodaryu za pomoshch!

AvDav 02.07.2007 17:58

Обьект не создается снова и снова, у тебя просто напросто глобальная перменная которая один раз создается при первом require, дальше логику надо строить так чтоб получить то что надо, насколько я понял, ты хочешь вызвать get_username(), с ожидаемым ответом 'David'? Тогда очевидно, тот кусок кода который делает set, должен вызваться раньше, соответсвенно, в lala.php надо сделать require("index.php"); а не require("config.php");

kernel 02.07.2007 21:33

Dorogoy AvDav! mojet bit ya slishkom mnogo osujdayu voprosi, zadannie mnoyu, ush izvenite menya za eto ...
No vopros takov -
1) yesle ya v lala.php stavlyu require("index.php"); a ne config.php, to lala.php kak budet znat' o tom, chto set_user() bil vizvan v index.php, a ne skajem v koko.php? vet' set_user() mojet
vizvacca v lyubom file - e.
2) a stoit li stavit require("index.php"); poskolku index.php yavlyaetsa polnim html fileom ? (ne schetaya to chto mojno prosto kusok set_user() stavit iz drugogo filea skajem set.php )
3) ti prav, ya xochu poluchit pre pomoshchi get_user() - 'David', odnako functsia set_user(), mojet vizvacca iz lyubogo filea v site - e!
4) pre obyavlenii vo vsex fileax "config.php" - v config.php $u = new user(); srobativaet construktor kotori presvaivaet nekotorix peremennix znachenie po umolchaniu. i uje v drugix
fileax peremennie poluchayut drugie znachenie pre pomoshchi set_xxx(); tolko vot - pre pervom shage skajem v index.php vso rabotaet normalno require("config.php"); kotori (konfog)
obyavlyaet $u a v uje v index.php rabotaet $u->set_user(); no pre perexode v lala.php, ile je v koko.php ya ne znayu kak poluchit $u. vet' esle ya v etix fileax stavlyu config.php, to v
confige $u snova opredelyaetsa, kak v pervi raz iz index.php... mojet est' kakoy to variant uznat' v config.php o tom chto $u uje obyavlen, i ne nado bolshe pisat' $u=new user(); vet' v
koko.php ya poluchayu $u s pustimi znacheniami.
Blagodaryu, i izvenite mne eshcho za ne gramotni russki yazik :)

AvDav 02.07.2007 23:00

Не знаю если честно почему такая проблема, у меня солидного опыта в ПХП нет, но я тут наверстал пример который нормально работает, можешь также попробовать require_once() который помещает код лишь один раз в отличии от require().

Intel 03.07.2007 03:57

Quote:

Originally Posted by kernel (Post 588380)
Barev dzez hargeli forumi masnakicner, Programmerner!!!

Unem mi harc Class - eri veraberyal, shat shnorhakal klinem lselu xorhurdner, ognutyan kargov.

Unenq Class - class.php - um
############################
class.php

class user() {
var $usr;

function set_username ($name) {
$this->usr=$name;
} // end function

function get_username () {
return $this->usr;
} // end function

} // end class
#############################

unenq naev index.php, vortex haytararum enq object

index.php
#############################

require("class.php");
$u=new user();
$u->set_username ('Armen');
echo $u->get_username();

#############################

ays [email protected] haskanali e... bayts inchpes kareli e ogtvel classi objectneric mek ayl php fileum, orinak patkeracnenq vor ays index.php fileum classi $usr [email protected] stanum e arjeq... bayts ayd [email protected] mez petq e naev myus fileum.. asenq other.php - um.

Naxapes shnorhakalutyun!

В PHP нет встроенного механизма для хранения об'ектов в сессии, ты должен сам выбрать/реализовать механизм сериализации и десериализации, ты должен поставить в соответствие SID и об'ект юзера, например можешь хранить его в DB, сериализавать в XML, или даже использовать serialize и забросить в сессию. Такой подход чаще используется в языках/технологиях более высокого уровня, например Java/.NET.

CyberJoe > Синглтон тут неприменим, время жизни твоего об'екта будет request, а нам нужно чтоб было session.

AvDav > Речь идет о другом. Проблема в том что, если каждый раз делать require(или require_once, без разницы), твой об'ект заново инициализируется, а нам надо чтоб он "сам знал" что хранит, без каких лобо set-ов.

kernel > Я правильно понял?

CyberJoe 03.07.2007 11:09

Intel > Он точно именно это хотел? Я из его написанного понял что он вообще хочет просто иметь один инстанс класса, и все. :eek::mrt:

Кстати, бацец :D
PHP Code:

<?php
class User {
  
// object instance
  
private static $instance;
  
  private static 
$name;

  private function 
__construct() {}

  private function 
__clone() {}

  public static function 
getInstance() {
    if (@isset(
$_SESSION['user_instance'])) {
        
self:$instance unserialize($_SESSION['user_instance');
    } else {
        
self:$instance = new User();
        
$_SESSION['user_instance'] = serialize(self:$instance);    
    }
    return 
self::$instance;
  }

  public function 
getName() {
    
self:$instance unserialize($_SESSION['user_instance');
    return 
$this->name;
  }
  
  public function 
setName($name) {
    
$this->name $name;
    
$_SESSION['user_instance'] = serialize(self::$instance);        
  }  
}


User::getInstance()->setName('Benjamin Linus');

$name User::getInstance()->getName(); 
?>

Intel зацени степень моей обкуренности:-)

Intel 03.07.2007 11:41

Меньше курить надо было, а где session_start(); ?

CyberJoe 03.07.2007 11:47

за кадром осталсо

kernel 03.07.2007 19:53

Quote:

Originally Posted by Intel (Post 588614)
kernel > Я правильно понял?

Pravilno i Tochno!!!!

kernel 03.07.2007 20:23

Dorogie druzia!!! Vo pervix ya ochen rad za vashi otzivi na moy vopros!!!
napisav sessiu ya imel v vedu vremya raboti scripta a ne doslovno session();
(sam vinovat)
u menya class user(), kotori proveryaet dannie pered registracii usera, registriruet usera v db, vozvroshchaet dannie iz db o uzere, skajem tak -
############## Class.php #####################################################
class user() {
var $user;
.......
var $xxx;
function set_user($val) {
if (xxxxxxxxx) {
$this->user=$val;
} // end func
function get_user() {
return $this->$user;
} // end func
function register_user() {
insert into xxxx (xxxx, xxx) valuess ($this->user, $this->xxx);
} // end func
function get_user_from_db() {
return select from xxx where user = $this->user;
} // end func
} // end class
}
#########################################################################
princip raboti klassa ya dumayu ponyaten.
prodoljim...
skajem v file e register.php ya pishu kod
include("class.php");
$u=new user();
if ($u->set_user('David')) {
$u->register_user();
} // end if
eto toje yastnenko...
prodoljem...
u menya v klasse uje presvoen $user, i vsyakoe info.
teper v perexode iz register.php na skajem yourinfo.php mne nujen $u->get_user() ile je $u->get_user_from_db();
po skolku u uzera mnogo infi, vso eto ya xochu toskat' so scriptom vo vremya raboti sitea.
I ne xochu pre kajdoy otkritii novogo *.php filea presvoivat' zanova znachenie objektov klassa user().
povtaryayu class user() imeet mnogo objectov, kotorie ne po ume vsyaki raz presvoivat'. tut ya tolko opisal user name i togdaleee...
nu mojet est' variant skajem pre pomoshchi get ile set otpravit username, i togda obyaviv klass zanova poluchit vse info s pomoshchu
set_user('david');
get_xxx_from_db()
get_yyy_from_db(); i. t. p.
Odnako mojet ya ne prav... etot klass mojet i ne pravilno stroen?
i voopshe chto vi skajete po povodu etogo klassa, i k obrashcheniu k nemu v raznix php fileax?
(izvenite menya za slishkom negramotni russki yazik)
Sposiba vsem za pomoshch i vnimanie!!!

kernel 03.07.2007 20:35

ist i eshcho odin variant, v klasse user() mogu pisat funckciu v rode kak konstruktor, skajem
$u->set_user('david');
$u->construct_from_db();
#### class ####
function construct_from_db() {
select * from users where username = '$this->user';
$this->phone=mysql_XXXXXXXXX
.........
$this->address=mysql_xxxxxxx
} // i togda ya mogu poluchit vse get_xxx() i.
############

a mojet i eto slishkom kustari variant :)

Intel 04.07.2007 03:02

Quote:

Originally Posted by kernel
vso eto ya xochu toskat' so scriptom vo vremya raboti sitea.

Это невозможно: PHP скрипт это не Web Application, он начинает работать каждый раз, когда его вызывают и заканчивает работу.
Для сохранения состояния предусмотрены session и cookie, а не об'екты которые могут "жить" на протяжении жизни Web Application-а, как в JSP/ASP.NET.
В PHP обычно при каждом request-е информацию берут заново(к примеру этот форум).

kernel 04.07.2007 11:14

Hargeli barekamner shat shnorhakal em boloric!!! Duq indz tveciq shat chisht xorhurdner!!!ayjm kporcem ashxatel singletoni mijocov, [email protected] karcum em bavarar klini nman ashxatanqi hamar.


All times are GMT. The time now is 17:06.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.