Stie cineva vre-o modalitate de a avea variabilele mostenite de… orice este in structura respeciva (gen o functie mosteneste variabilele globale (si le poate modifica), o metoda mosteneste variabilele clasei si variabilele mostenite de clasa and so on si variabilele globale)? Daca da, va rog sa ma ghidati. Oh, cu o mentiune: fara pluginuri pentru php (a no-go) si preferabil fara a edita php.ini, dar daca nu este alta modalitate este ok si a edita php.ini.
Va multumesc pentru timpul acordat!
Edit: Fara a folosi global $var si $GLOBALS[“var”].
Ma refer la situatia din C/C++, unde intr-o functie poti folosi orice variabila mostenita fara a le apela (prin acel global). Deci sa le pot apela si edita fara a trebui sa folosesc global $varX, $varY;
… ci daca am $x in $GLOBALS, sa pot folosi $x in orice functie si clasa din interiorul respectivului fisier.
#include <iostream>
using namespace std;
// Global variable declaration:
int g;
int main ()
{
// Local variable declaration:
int a, b;
// actual initialization
a = 10;
b = 20;
g = a + b; /* g := 30 */
cout << g; /* prints 30 */
return 0;
}
O provocare… discutam cu cineva despre unele avantaje si dezavantaje ale limbajelor de programare, care constituie probleme la trecerea de la un limbaj la altul si m-a provocat sa gasesc o modalitate de a mosteni automat variabilele globale.
TL;DR: O provocare…
Edit: nu am inteles raspunsul… inca n-am terminat facultatea…
Scapi de $GLOBALS si dai de folosirea unei metode… lafe puteam sa fac si eu o functie getGlobal($name) (return $GLOBALS[$name];} si setGlobal($name,$value){$GLOBALS[$name]=$value;) si terminam… dar tot acolo ajungeam.
Ma refeream daca este vre-o modalitate de a face mostenirea fara a ma incurca cu alte clase sau functii. Gen scriu niste cod sau modific php.ini si globalele sunt accesibile din interiorilor functiilor si metodelor, fara cod suplimentar (odata ce am rezolvat problema).
<?
$x="Este";
function y(){
return $x." pro";
}
class z{
function q(){
return $x." contra";
}
}
w=new z;
echo y() . w->q();
Ok, cred ca am gresit eu exemplu… iar in cazul de mai sus (same post), ar fi eroare si la y() si la w->q(), deoarece acelasi $x este global si nu este mostenit …
[quote=“iamntz, post:11, topic:2087”]
Dacă afli vreo soluție să ne spui și nouă…
[/quote]Roger that!
OK, cred că trebuie să înțelegi puțin diferența de abordare dintre cele două limbaje.
C++ e strong typed. Variabilele trebuiesc declarate înainte de folosire. Când folosești o variabilă într-o funcție/metodă, compilatorul caută prima oară dacă variabila e declarată local, dacă da - o să folosească variabila locală. Dacă variabila nu e declarată local, atunci o să folosească variabila globală cu același nume (dacă există).
PHP e dynamic. Variabilele nu trebuies declarate înainte de folosire și sunt create automat atunci când le atribui o valoare. Nefiind declarate explicit, e imposibil de ghicit din ce scop trebuie să vină variabilă folosită într-o funcție. Cea mai ok opțiune a fost să se considere toate variabilele locale atâta timp cât nu sunt declarate explicit ca fiind globale. Cealaltă opțiune ar fi fost să declari explicit ce vrei să foloști doar local - evident că în cazul ăsta aveam mult mai mult cod de scris și era mult mai enervant.
Comportamenul care-l vrei tu îl au doar variabilele superglobals în PHP. Aceste variabile au scop global fără să fie declarate explicit cu global. Din păcate aceste variabile sunt definite de limbaj, de exemplu $_GET, $_POST, $_SESSION, $GLOBALS
Ca să folosești o variabilă $x ca și variabilă globală ca în C++ (fără să folosești keyword-ul global) nu văd altă variantă decât cea de a folosi varianta $GLOBALS['x'] peste tot în cod.
Personal urăsc când văd $GLOBALS și consider de 'nșpe mii de ori mai elegant folosirea global $x.
O altă idee mai simplă din punctul meu de vedere ar fi:
<?php
class Container {
public static $x = '';
}
function schimba() {
Container::$x = 'Test';
}
function afiseaza() {
echo Container::$x;
}
schimba();
afiseaza();
Nu vreau să pornesc un flame war, dar nu înțeleg de ce te deranjează așa mult global $x, mai ales dacă vii dintr-un limbaj unde toate variabilele trebuie declarate explicit.
[quote=“User rink.attendant.6 - Stack Overflow said”]Not enough Rep to comment yet, so if someone wants to post this as a comment to James C that’d be great. Just wanted to clarify, from the php manual:
If the deprecated register_globals directive is set to on then $_POST[‘foo’] would also exist as $foo
Note the deprecated, but also note the legitimacy of the answer.[/quote]
TL;DR: $_POST[‘foo’] poate fi accesat ca $foo. DEPRECATEDbut valid.