Page 1 sur 2

recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 01:07
par jeorcal
pourquoi ceci ne marche pas tout simplement ?

Code : Tout sélectionner

class A { function B(){ return " OK ", } function C(){ return $this->B(); } }

la function C devrait retourner " OK "

que faut il faire pour récupérer ces valeurs de function à function en PHP ?

merci

merci

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 07:13
par stealth35
faut vraiment que tu bosses en E_ALL | E_STRICT, t'as aucunes erreurs de conception juste de syntaxe :wink:

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 07:36
par jeorcal
en .net c'est de toute façon strict par défaut, tout doit être nommé et typé

si tu mets Joolmla en E_ALL | E_STRICT tu exploses l'application, t'as un roman d'erreurs, et le html généré c'est aussi une horreur

c'est quoi la syntaxe juste pour ça ?
à la place de $this->B(); ?
merci

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 08:03
par stealth35
en .net c'est pareil voir mêmé pire que php et c'est qui fais la force du C
normalement tu devrais avoir aucune erreur en E_ALL | E_STRICT
en plus le C/C++ te dis les variable ou les classe qui ne sont pas utilisé au moment de la compilation, php c'est traitre dans le sans ou c'est un peu comme le HTML même si c'est mal codé le navigateur t'affiche quand même la chose, faire :
<ul>
<li> blablz
<li> truc
<li> machin
</ul>
en php c'est la même chose

ton return " OK ", c'est une virgule il attend un ;
si joomla t'affiche des erreurs c'est plutôt de ton coté :wink:

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 08:15
par jeorcal
la virgule à la place du point virgule c'est en écrivant un exemple ici, dans mon module je le verrais de suite ce serait souligné en rouge

je fais du .net depuis le tout début( la première version 1 alpha) et j'aime cette syntaxe où tout doit être déclaré, des class avec 1 ou plusieurs constructeurs , héritages ect ... tout est typé, les collections sont typées avec tes propres types ... j'ai juste du mal avec php

sinon les erreurs par tonnes viennent bien de Joomla , si je mets dans mon module

error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", 1);

j'obtiens une centaine de lignes :

Strict Standards: JLoader::import() [jloader.import]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in /www/joomtest/libraries/loader.php on line 186

Strict Standards: Non-static method JLoader::import() should not be called statically in /www/joomtest/libraries/loader.php on line 186


ect ...

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 15:39
par stealth35
ouai php niveau du typage c'est aussi un peu trop souple a mon gout aussi mais bon ...
pour ton erreur ca viens du php.ini ou le default-timezone n'est pas renseigné
pour l'autre ca viens de joomla qui appelle statiquement une méthode non static, je te conseil de prendre la dernière version a moins que ca sois déjà fais :wink:

sinon au niveau de ton code comme ca, ca marche
class A
{
    function B()
    {
        return " OK ";
    }

    function C()
    {
        return  $this->B();
    }
}

$a = new A();
echo $a->C();

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 19 juin 2010, 16:11
par jeorcal
merci pour ton aide ça marche nickel

pour le time zone je dois regarder

... faudra que je te payes une mousse :D

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 13:40
par jeorcal
j'ai jamais eu de prob comme ça en dot.net .... putain de php !
même genre de code et ça marche pas zone = $this->shipping_zone(); me plante le truc
class vm_ps_shipping_price {

function shipping_zone($id){
		$q = "SELECT zone_id FROM jos_vm_country WHERE country_3_code = (SELECT country FROM jos_vm_user_info WHERE user_id  =  $id );";
		$db = new ps_DB;
		$db->query($q);
		$db->next_record();
		return $db->f("zone_id");
	}


function shipping_price(){
		$zone = $this->shipping_zone();
		$q = "SELECT shipping_rate_value FROM jos_vm_shipping_rate WHERE shipping_rate_carrier_id =" . $zone;
		$db = new ps_DB;
		$db->query($q);
		$db->next_record();
		return  $db->f("shipping_rate_value");
	}

}

la function shipping_zone retourne la bonne valeur

merci encore

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 13:52
par stealth35
shipping_zone(); attend un paramètre tu lui en donne pas :wink:

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 13:58
par jeorcal
non c'est pour l'exemple j'ai modifie et a un seul endroit , en fait c'est

Code : Tout sélectionner

function shipping_zone(){ $user =& JFactory::getUser(); $id = $user->id; .... }
y a aucun paramètre

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 13:59
par jeorcal
voila le code exact
class vm_ps_shipping_price {
	
	function shipping_zone(){
		$user =& JFactory::getUser();
		$id = $user->id;
		//fr = 1 DOMTOM =2, Europe =  3, monde =4
		$zone = null;
		$q = "SELECT zone_id FROM jos_vm_country WHERE country_3_code = (SELECT country FROM jos_vm_user_info WHERE user_id  =  $id );";
		$db = new ps_DB;
		$db->query($q);
		$db->next_record();
		$zone = $db->f("zone_id");
		// on traite les dom tom comme l'europe
		if ($zone ==3){$zone=2;}
		return $zone ;
	}
	

	function shipping_price(){
		$shprice = null;
		$quantity = $_SESSION['vm-amount'];
		if ($quantity  > 2){
			$quantity = $quantity - 1;
		}
		$quantextra = $quantity -1 ; 
		$zone = $this->shipping_zone();
		$q = "SELECT zone_cost,zone_description  FROM  jos_vm_zone_shipping  WHERE zone_tax_rate =" . $zone;
		$db = new ps_DB;
		$db->query($q);
		$db->next_record();
		$ratev = $db->f("zone_cost");
		$ratevextra = $db->f("zone_description");
		if ($quantity  == 1){
			$shprice = $ratev ;
		}
		else{
			$shprice = $ratev + ( $quantextra * $ratevextra) ; 
		}
		return $shprice;
	}

}
ça plante dans la deuxieme function à $zone = $this->shipping_zone();

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 14:01
par stealth35
non c'est pour l'exemple j'ai modifie et a un seul endroit , en fait c'est

Code : Tout sélectionner

function shipping_zone(){ $user =& JFactory::getUser(); $id = $user->id; .... }
y a aucun paramètre

quelle est l'erreur d'affiché ? ton niveau d'erreur est bien au maximum ?

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 14:06
par jeorcal
si je rajoute tes function dans la class
function B()
    {
        return " OK ";
    }

    function C()
    {
        return  $this->B();
    }
je plante à

$C = ps_shipping_price::C() ;

un appel me.machin plante pas en dot.net

ça vient pas de mes functions

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 14:08
par stealth35
oui mais quelle est l'erreur d'affiché ?
on mélange pas le statique et le non statique

Re: recuperer valeur d'unefunction dans un autre dans une class

Posté : 12 juil. 2010, 14:12
par jeorcal
y a pas d'erreur affichée j'ai une page blanche
si je déclare tout public c'est pareil

merci encore pour ton temps