- Рандом функция на две места
WT форуми -> PHP MySQL ASP.NET -> Рандом функция на две места
Създайте нова тема Напишете отговор 
Автор Съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 8:27 am     Рандом функция на две места Отговорете с цитат


Здравейте, имам следния проблем. Генерирам някакъв рандом стринг примерно с rand(). Трябва ми резултатът от функцията да мога да го предавам между класовете без да се променя. В случая при всяко извикване на функцията резултатът е различен и не мога да сравнявам стринговете. Някаква идея как да стане? Също така трябва да е без да се записва в база данни или сесия.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
flafy
Нов
Нов

Регистриран на: 22/09/2013 6:36 pm

Support: 7
Bonus: 14
Мнения: 60
Мнение 29/06/2017 9:26 am      Отговорете с цитат


http://php.net/manual/bg/language.oop5.static.php
Това дали ще помогне ?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 9:47 am      Отговорете с цитат


Най-вероятно ще стане, обаче така е все едно да декларирам глобална променлива, което не е добре.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
flafy
Нов
Нов

Регистриран на: 22/09/2013 6:36 pm

Support: 7
Bonus: 14
Мнения: 60
Мнение 29/06/2017 10:06 am      Отговорете с цитат


А ако използваш Видимост на поле ?
http://php.net/manual/bg/language.oop5.visibility.php
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 10:13 am      Отговорете с цитат


Дай някакъв пример как го мислиш Smile .
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
flafy
Нов
Нов

Регистриран на: 22/09/2013 6:36 pm

Support: 7
Bonus: 14
Мнения: 60
Мнение 29/06/2017 10:21 am      Отговорете с цитат


Нещо такова ли трябва да бъде:
PHP code:

class Rand {
protected $random = 'random string';
}

class MyClass extends Rand {
public function compare() {
echo $this->random;
}
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 11:01 am      Отговорете с цитат


Ето примерен код. Трябва в клас One и клас Two стринговете да са еднакви. Проблемът е че, самата функция bin2hex(openssl_random_pseudo_bytes(16)); или каквато и да е друга рандом функция при всяко извикване генерира нов код.



class Rand {
   
    public function randomString() {

        $string = bin2hex(openssl_random_pseudo_bytes(16));

        return $string;
    }
}

class One {

    private $_rand;

    public function __construct(Rand $rand) {
       
        $this->_rand = $rand;
    }
   
    public function run() {

        $string = $this->_rand->randomString();

        echo $string;
    }
}

class Two {

    private $_rand;

    public function __construct(Rand $rand) {
       
        $this->_rand = $rand;
    }
   
    public function run() {

        $string = $this->_rand->randomString();

        echo $string;
    }
}

Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 11:14 am      Отговорете с цитат


Принципно с наследяване ще стане, но се чудя има ли по-добър вариант.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 103
Bonus: 196
Мнения: 2768
Мнение 29/06/2017 11:39 am      Отговорете с цитат


Там където се създават One и Two не може ли да се създава и този стринг, и сътоветно той да се pass-ва в конструктора?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 342
Bonus: 682
Мнения: 2564
Мнение 29/06/2017 11:41 am      Отговорете с цитат


<?php
class Rand {
    private static $rand;
    public static function randomString() {
        if(is_null(self::$rand)) {
            self::$rand = bin2hex(openssl_random_pseudo_bytes(16));
        }
        return self::$rand;
    }
}

class One {
    public $random;
    public function __construct() {
        $this->random = Rand::randomString();
    }
}

class Two {
    public $random;
    public function __construct() {
        $this->random = Rand::randomString();
    }
}

$one = new One;
$two = new Two;
var_dump($one === $two); //FALSE
var_dump($one->random === $two->random); //TRUE
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 12:01 pm      Отговорете с цитат


Fakeheal написа:
<?php
class Rand {
    private static $rand;
    public static function randomString() {
        if(is_null(self::$rand)) {
            self::$rand = bin2hex(openssl_random_pseudo_bytes(16));
        }
        return self::$rand;
    }
}

class One {
    public $random;
    public function __construct() {
        $this->random = Rand::randomString();
    }
}

class Two {
    public $random;
    public function __construct() {
        $this->random = Rand::randomString();
    }
}

$one = new One;
$two = new Two;
var_dump($one === $two); //FALSE
var_dump($one->random === $two->random); //TRUE



Това е същото като сингълтон само дето не връщам класа а самия стринг. Аз до такава степен съм почнал да избягвам сингълтоните че изобщо не ми е хрумнало че може да се напише по този начин Very Happy .
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1577
Мнение 29/06/2017 2:34 pm      Отговорете с цитат


Благодаря за помощта.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети