powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / передача определённых параметров статическим классом
8 сообщений из 8, страница 1 из 1
передача определённых параметров статическим классом
    #37602725
Фотография Пионэр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно получить запрос от строго определённого источника, достаточно этот источник указать:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class getter {

	function test($id = 0){
    
		$test = new tester();
		return $test->get_subj($this, $id);
	}

	static function static_test($id = 0){

		$test = new tester();
		return $test->get_subj(self, $id);
	}
}



class tester{

	function get_subj(getter $obj, $id){
		
		// вычисление $subj по $id
		...
		return (isset($subj)) ? true : false;
	}	
}




То есть, в данном случае запрос будет выполнен:

Код: php
1.
2.
  $G = new getter();
  $G->test(123);



Если же метод вызван как статический, то передать экземпляр таким же макаром уже не получится..
Код: php
1.
2.
3.
4.
5.
 
  getter::static_test(123);

// Catchable fatal error: 
// Argument 1 passed to tester::get_subj() must be an instance of getter, string given, called in bla bla bla



Собственно догадываюсь, что сие ограничение непреодолимо, но мало ли :)
Существует ли возможность проверять параметры, передаваемые статическим классом?
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37602740
Фотография Пионэр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один хак придумал: создать и передать экземпляр класса.
А для пущей уверенности, добавил валидацию - переменную, которую вне класса изменить нельзя (ибо передать экземпляр можно откуда угодно).

Переменная переопределяется в вызывающем методе, делается вызов, после чего переменной опять возвращается значение:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
class getter {

	private static $name = 'Anybody';
	private static $instance;  // object instance
	public static function inst(){
		if (self::$instance === null) {self::$instance = new self;}
		return self::$instance;
	}

	function test($id = 0){

		$test = new tester();
		return $test->get_subj($this, $id);
	}

	static function static_test($id = 0){

		self::$name = 'Pioner'; // открываем доступ

		$test = new tester();
		$re = $test->get_subj(self::inst(), $id);

		self::$name = 'GoHome'; // закрываем доступ

		return $re;
	}

	function myName(){return self::$name;}

}



class tester{

	function get_subj(getter $obj, $id){

		if($obj->myName() != 'Pioner'){
			exit('Уважаемый <b>'.$obj->myName().'</b>, посторонним В!!');
		}

		echo 'Добро пожаловать, <b>'.$obj->myName().'</b>!!';
		// вычисление $subj по $id
		//...
		return (isset($subj)) ? true : false;
	}
}
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37602847
как то так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА для пущей уверенности, добавил валидацию - переменную, которую вне класса изменить нельзя (ибо передать экземпляр можно откуда угодно).
Переменная переопределяется в вызывающем методе, делается вызов, после чего переменной опять возвращается значение:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
class getter 
{
	protected static $_instance;

	final private static function getInstance()
        {
		if ( !static::$_instance )
                {
                         static::$_instance = new static;
                }
		return static::$_instance;
	}

	public function test( $id = 0 )
        {
		$test = new tester();
		return $test->get_subj( $this, $id );
	}

	public static function static_test( $id = 0 )
        {		
		$test = new tester();		
		return $test->get_subj( self::getInstance(), $id );
	}
}

class tester
{
	public function get_subj( getter $obj, $id )
        {				
		// вычисление $subj по $id
		//...
		return isset( $subj );
	}
}


+ не уверен, что нельзя передать параметром напрямую в статике, однако пробовать лень!

Успехов!
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37602886
Фотография Пионэр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
те же яйца :) разница только в названии метода, вызывающего экземпляр класса
Код: plaintext
getInstance() vs inst()


не уверен, что нельзя передать параметром напрямую в статике,

в том и дело, что не передаётся, ибо в статике не создаётся экземпляр класса

википедия
Использовать статические функции класса можно, не создавая самого экземпляра класса.


если передать статичный "экземпляр", то на самом деле будет передана строка.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
        // запрашиваем из статического класса
        get_subj(self, $id)


	function get_subj($obj, $id){

		echo $obj; // выведет слово "self"
	}
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37603202
как то так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторте же яйца :) разница только в названии метода, вызывающего экземпляр класса
getInstance() vs inst()
почитай про модификаторы доступа - довольно поучительно... может тогда
авторА для пущей уверенности, добавил валидацию - переменную, которую вне класса изменить нельзя
покажется бредом ;)
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37603731
Фотография Пионэр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разница между твоим и моим примером в том, что у в меня инициирующий метод назначен как Паблик , а у тебя как Приват , а точнее
Код: php
1.
final private static function getInstance()



В данном случае защищать метод getInstance() бесполезно, даже если написать большими красными буквами "БУ!"

Я же упоминал, что "передать экземпляр можно откуда угодно".

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class getter {

	private static $instance;
	final private static function getInstance(){
	
		if (self::$instance === null) {self::$instance = new self;}
		return self::$instance;
	}

}


##    обходим ограничения, создав экземпляр без обращения к getInstance()

	$oTest = new tester();
	$oHuck = new getter(); // о Боже! и что теперь будет?!

	$result = $oTest->get_subj($oHuck, 'what the fuck?'); // проглотит и не подавится
...
Рейтинг: 0 / 0
передача определённых параметров статическим классом
    #37603866
как то так
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: php
1.
2.
3.
4.
$oTest = new tester();
$oHuck = new getter(); // о Боже! и что теперь будет?!

$result = $oTest->get_subj($oHuck, 'what the fuck?'); // проглотит и не подавится


будет именно то, что ты описал в методе get_subj - в чём проблема?!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
передача определённых параметров статическим классом
    #38417927
guest349343487
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
class getter
{
....

public static function static_test( $id = 0 )
{
$test = new tester();
return $test->get_subj( static::getInstance(), $id );
}
}

php5.3+
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / передача определённых параметров статическим классом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]