Jump to content
php.lv forumi

Kā dinamiski definēt klases mainīgo ar 'private' redzamību?


404

Recommended Posts

Ir konfig fails ar masīvu: $setup no kura klases konstruktorā tiek dinamiski saģenerēti klases mainīgie:

public function __construct()
{
require 'config.php';

foreach($setup as $classVar => $value)
{
$this->{$classVar} = $value;
}
}

Ir kaut kāda iespēja viņiem uzsetot redzamību uz 'private',jeb jāsamierinās,ka šādā veidā variabļi vienmēr būs publiski?

Link to comment
Share on other sites

Nav jau obligāti jāliek kā lauki. Izmanto __set un __get. Pašas vērtības glabā masīvā, kas ir privāts. Ar __get vienkārši neļauj piekļūt vērtībām.

Papēti __set un __get: http://php.net/manual/en/language.oop5.magic.php

Ir pat paraugs: http://www.php.net/manual/en/language.oop5.magic.php#99453

Link to comment
Share on other sites

Šis veids derētu ļoti labi,bet tā tiek zaudēta iespēja salikt visu vajadzīgo ārējā konfigā. Tad viss ir jāliek iekš klases masīva un zūd jēga to darīt dinamiski. Jeb kļūdos?

Link to comment
Share on other sites

Ja jāatbild uz jautājumu, tad, jā, izmantojot refleksiju to laikam izdarīt var: http://www.php.net/manual/en/reflectionproperty.setaccessible.php

 

$refObject   = new ReflectionObject( $thisj );
$refProperty = $refObject->getProperty( $classVar );
$refProperty->setAccessible( false);

 

Bet vai tā rīkoties ir pareizi konkrētajā situācijā, tas varētu būt cits jautājums (nezinu priekš kam tas viss ir vajadzīgs).

Link to comment
Share on other sites

Ja jāatbild uz jautājumu, tad, jā, izmantojot refleksiju to laikam izdarīt var: http://www.php.net/m...taccessible.php

Ja esmu pareizi sapratis, tad tad refleksija vienkārši izveido objekta kopiju un visas izmaiņas attieksies vienīgi uz to bez iespējas ietekmēt "īstos" klases variabļus,tā ka laikam tas īsti nederēs.

 

Bet vai tā rīkoties ir pareizi konkrētajā situācijā, tas varētu būt cits jautājums (nezinu priekš kam tas viss ir vajadzīgs).

Galvenā motivācija-iznest visu konfigurāciju ārējā failā,lai nav jāaiztiek klases katru reizi,kad ir vajadzība ko pamainīt.

Edited by 404
Link to comment
Share on other sites

Paldies-tieši tas kas vajadzīgs. Kā reiz iedeva apgaismību,kā viegli norealizēt Brieža ieteikto :)

   private $_config;

   public function __construct()
   {
       require 'config.php';

       $this->_config = $setup;
   }

   public function __get($key)
   {
       return isset($this->_config[$key]) ? $this->_config[$key] : '';
   }

 

Edit: Bet šādi atkal ir problēma ka aizsargāts ir vienīgi pats $_config masīvs,bet __get viņa saturam tāpat ļaus piekļūt ārpus klases. To ir iespējams kaut kā nokontrolēt?

Edited by 404
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...