recuperer valeur d'unefunction dans un autre dans une class

Eléphant du PHP | 75 Messages

19 juin 2010, 01:07

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

ViPHP
ViPHP | 5462 Messages

19 juin 2010, 07:13

faut vraiment que tu bosses en E_ALL | E_STRICT, t'as aucunes erreurs de conception juste de syntaxe :wink:

Eléphant du PHP | 75 Messages

19 juin 2010, 07:36

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

ViPHP
ViPHP | 5462 Messages

19 juin 2010, 08:03

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:

Eléphant du PHP | 75 Messages

19 juin 2010, 08:15

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 ...

ViPHP
ViPHP | 5462 Messages

19 juin 2010, 15:39

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();

Eléphant du PHP | 75 Messages

19 juin 2010, 16:11

merci pour ton aide ça marche nickel

pour le time zone je dois regarder

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

Eléphant du PHP | 75 Messages

12 juil. 2010, 13:40

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

ViPHP
ViPHP | 5462 Messages

12 juil. 2010, 13:52

shipping_zone(); attend un paramètre tu lui en donne pas :wink:

Eléphant du PHP | 75 Messages

12 juil. 2010, 13:58

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

Eléphant du PHP | 75 Messages

12 juil. 2010, 13:59

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();

ViPHP
ViPHP | 5462 Messages

12 juil. 2010, 14:01

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 ?

Eléphant du PHP | 75 Messages

12 juil. 2010, 14:06

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

ViPHP
ViPHP | 5462 Messages

12 juil. 2010, 14:08

oui mais quelle est l'erreur d'affiché ?
on mélange pas le statique et le non statique

Eléphant du PHP | 75 Messages

12 juil. 2010, 14:12

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