Jump to content
pedro43

Static Class - avoid static access

Recommended Posts

pedro43

olá,

eu tinha este código:


class A {
	/* ... */
	public static function activate() {
		B::do_thing();
	}
}

mas a análise estática queixava-se de:
      Avoid using static access to class 'B' in method 'activate'.
 

e acabei por fazer:

class A {
	protected static $b;

	public function __construct() {
		
		if ( self::$b === null ) {
			self::$b = new B();
		}
	}
	public static function activate() {
		self::$b = new B();
		self::$b::do_thing();
	}
}

mas parece-me excessivo, agora em vez de uma linha tenho 6. Eu percebo o problema de ter o acesso à classe estática é ter uma dependencia não declarada e seja dificil testar activate() por causa disso.

Uma alternativa seria passar $b para o método, mas ia dar ao quase ao mesmo.

Alguém tem alguma ideia melhor? 
 

Share this post


Link to post
Share on other sites
HappyHippyHippo

depende o que o a classe B está a fazer, mas normalmente, seria dar uma instância da classe B como Dependancy Injection no construtor e usar-la da forma normal


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pedro43

Olá @HappyHippyHippo

obrigado pela ajuda!

 

> seria dar uma instância da classe B como Dependency Injection no construtor e usar-la da forma normal

o meu problema é com o método static. quando este método é chamado antes do construtor, tenho que garantir a class B.

daí, o código duplicado.

Se tiver que passar a classe B, tenho que passar na mesma a classe B para o construtor e manter o código do método `activate().`

 

> depende o que o a classe B está a fazer

porquê?

 

obrigado,

Share this post


Link to post
Share on other sites
HappyHippyHippo
4 hours ago, pedro43 said:

Se tiver que passar a classe B, tenho que passar na mesma a classe B para o construtor e manter o código do método `activate().`

 

e onde está o problema disso ? a razão de ser estática é que está a ser discutida aqui

4 hours ago, pedro43 said:

> depende o que o a classe B está a fazer

porquê?

porque depende sempre para que serve essa classe


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.