Autor Zpráva
Honza_n
Profil *
Definoval jsem stdClass $pod_jmena mimo třídu word a chci ji zpřístupnit ze třídy word.
class words
{
  var $poj; // podstatná jména
  function &init() {
  $this->poj=$pod_jmena;
  print_r($this->poj);
  } 
}


Zkoušel jsem i global ale nic nejde to zpřistupnit. Jak na to?
Honza_n
Profil *
tak teda ze třídy words
martindeveloper
Profil
Přesně nechápu co potřebujete ale zkusím.

public $poj;


A potom můžete
$pod = $instance->poj;
Majkl578
Profil
martindeveloper:
var má stejnou viditelnost jako public, akorát je to vykopávka z PHP 4.

Z jakého důvodu funkce vrací (ve skutečnosti nevrací) referencí?

K dotazu: musíš ji nějak předat, nejspíš argumentem.
Honza_n
Profil *
Nejde o funkci. Jde o dtd třídu - objekt $pod_jmena . $pod_jmena jsem definoval ještě před definováním třídy. Uvnitř funkce se nezobrazuje
Honza_n
Profil *
oprava:
jde o std třídu - objekt $pod_jmena
Honza_n
Profil *
global $pod_jmena;
nezabira
Majkl578
Profil
To na tom co jsem řekl nic nemění.

Uveď příslušnou část kódu, ne jen útržek.
Honza_n
Profil *
$pod_jmena = (object) array(
    'vzory' => (object) array (
      'm' => array ('mz1', 'mz2', 'md1', 'md2', 'ml1', 'ml2' ),
      'z' => array ('zz1', 'zz2', 'zd1', 'zd2' ),
      's' => array ('sz1', 'sz2' ), 
      'mz' => array ('mz1', 'mz2' ),
      'zz' => array ('zz1', 'zz2' ), 
      'sz' => array ('sz1', 'sz2' ), 
      'm1' => array ('mz1', 'md1', 'ml1' ),
      'z1' => array ('zz1', 'zd1' ),       
      's1' => array ('sz1' ),               
      'm2' => array ( 'mz2', 'md2', 'ml2' ), 
      'z2' => array ( 'zz2', 'zd2' ),        
      's2' => array ( 'sz2' ),                
      '1' => array ('mz1', 'md1', 'ml1', 'zz1', 'zd1', 'sz1' ),
      '2' => array ('mz2', 'md2', 'ml2', 'zz2', 'zd2', 'sz2' ) 
    )
);

Honza_n
Profil *
Já jsem to trochu zkrátil. Ve words je constructor

function words( $params = array() ) {
   $this->init();
  }


a volám to takto

if ($what=="define"):
  include_once "class_words.php";
  $w = new words();  
endif;


No ale jde o ten objekt $pod_jmena že nejde vidět uvnitř metody
Majkl578
Profil
Napsal bych to nějak takto:
<?php

$podstatnaJmena = (object) array(
    'vzory' => (object) array (
      'm' => array ('mz1', 'mz2', 'md1', 'md2', 'ml1', 'ml2' ),
      'z' => array ('zz1', 'zz2', 'zd1', 'zd2' ),
      's' => array ('sz1', 'sz2' ), 
      'mz' => array ('mz1', 'mz2' ),
      'zz' => array ('zz1', 'zz2' ), 
      'sz' => array ('sz1', 'sz2' ), 
      'm1' => array ('mz1', 'md1', 'ml1' ),
      'z1' => array ('zz1', 'zd1' ),       
      's1' => array ('sz1' ),               
      'm2' => array ( 'mz2', 'md2', 'ml2' ), 
      'z2' => array ( 'zz2', 'zd2' ),        
      's2' => array ( 'sz2' ),                
      '1' => array ('mz1', 'md1', 'ml1', 'zz1', 'zd1', 'sz1' ),
      '2' => array ('mz2', 'md2', 'ml2', 'zz2', 'zd2', 'sz2' ) 
    )
);

class Words
{
    private $podstatnaJmena; // podstatná jména

    public function __construct(\stdClass $podstatnaJmena)
    {
        $this->podstatnaJmena = $podstatnaJmena;
        
        var_dump($this->podstatnaJmena);
    } 
}

new Words($podstatnaJmena);
Zkus si navyknout na psaní kódu, který dává na první pohled smysl (tj. dobře pojmenované funkce, proměnné, třídy) a má nějakou strukturu (camelCase u tříd, metod, a proměnných pascalCase (stejné, jen malé písmeno na začátku)).
Honza_n
Profil *
OK dík za tip. Ale jsou na to dva pohledy. V linuxu a obzvláště v perlu lidi se řídí pravidlem čím kratší, tím lepší. A jelikož chci aby se mi s těmi vlastnostmi dobře pracovalo a bylo to rychlé aj nechci vypisovat celá jména jako pridavna_jmena ale pouze prj ... to má taky svou logiku. Ale jinak jo. Já jsem strukturu opisoval podle nějakého starého kódu.

Já mám spíš dotaz k tomu cos napsal. Znamena to, že to musim dostat do té třídy jako argument a jinak to nejde?
Honza_n
Profil *
A co znamená to

\stdClass

mě to píše unexpecter character in input, takže jsem to smazal

ale jinak to jede, díky
Majkl578
Profil
Honza_n:
Znamena to, že to musim dostat do té třídy jako argument a jinak to nejde?
Je to jediný čistý způsob. Věci jako global apod. jsou nevhodné.

A co znamená to
\stdClass
Jmenný prostor, máš staré PHP.

Já jsem strukturu opisoval podle nějakého starého kódu.
Nejhorší chyba, kterou může začátečník udělat.
Lamicz
Profil
Majkl578:
IMHO v tomto pripade bych namespaces neresil ;)

Moderátor Str4wberry: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0