Указатели (ссылки) на переменные (функции)

StalkerClasses

Новичок
PHP:
class a {
    public $var1 = 10;
  
    function Func(){
        $this->var1 = 20;
        bbb($this);
        return $this->var1;
    }
}

function bbb($obj){
    $obj->var1 = 30;
}

$class = new a;
$class->Func(); // ??? 30
Как реализуются такие указатели (ссылки в PHP?).
По аналогии как это сделано в ларавель с переменной builder?

PHP:
protected static function booted()
    {
        static::addGlobalScope('ancient', function (Builder $builder) {
            $builder->where('created_at', '<', now()->subYears(2000)); //
            $builder->where('created_at', '<', now()->subYears(2000));
            $builder->where('created_at', '<', now()->subYears(2000));
            $builder->where('created_at', '<', now()->subYears(2000));
            // ничего не возвращяется... нет return и переменные не надо пересохранять... $builder = $builder->where();
        });
    }
 

StalkerClasses

Новичок
Ты 7 лет на форуме, но до сих пор не знаешь как в php передаются объекты ? https://www.php.net/manual/ru/language.oop5.references.php
Я знаю как сделать если поставить ссылку при передаче аргумента:

function bbb(&$obj){ // &
$obj->var1 = 50;
}

но в ларавель в функции не передается ссылка...
static::addGlobalScope('ancient', function (Builder $builder) {

Подскажите пожалуйста...
 

AmdY

Пью пиво
Команда форума
Я знаю как сделать если поставить ссылку при передаче аргумента:

function bbb(&$obj){ // &
$obj->var1 = 50;
}

но в ларавель в функции не передается ссылка...
static::addGlobalScope('ancient', function (Builder $builder) {

Подскажите пожалуйста...
Так передаётся объект Builder $builder, он всегда передаётся по ссылке, потому & ставить не надо. (это можешь не читать. в php 4 объекты передавались по значению, потому там тоже ставился амперсанд, но начиная с php5 все как в доке которую скинул)
 

AmdY

Пью пиво
Команда форума
Блин, вот знаешь. Если бы мне скинули такую ссылку, я б день два разбирался, перечитвал. разбирал примеры, читал комментарии, искал бы информацию на основании этого. А ты через 6 минут уже забиваешь и просишь разжевать.
 

StalkerClasses

Новичок
Так передаётся объект Builder $builder, он всегда передаётся по ссылке, потому & ставить не надо. (это можешь не читать. в php 4 объекты передавались по значению, потому там тоже ставился амперсанд, но начиная с php5 все как в доке которую скинул)
Можно пожалуйста пример привести как делается этот builder?
В доке нет такого примера...
 

StalkerClasses

Новичок
Блин, вот знаешь. Если бы мне скинули такую ссылку, я б день два разбирался, перечитвал. разбирал примеры, читал комментарии, искал бы информацию на основании этого. А ты через 6 минут уже забиваешь и просишь разжевать.
Если бы можно было сам разобрался...
Я регулярные выражения и join тоже не с первого раза понял и не сам...
 

Yoskaldyr

"Спамер"
Партнер клуба
@StalkerClasses Какое отношение передача объекта по ссылке коррелирует с вопросом как делается этот билдер? Ты вот реально определись что тебе надо. Тебе уже не раз писали как правильно задавать вопросы. Описывай какую проблему ты хочешь решить, а не как сделать свой новопридуманный костыль.

Заведи себе собаку, с ней ты сможешь выговориться. Она будет сидеть и внимательно тебя слушать и пристально и с любовью смотреть на тебя преданными глазами. И ты точно так же сможешь ей все рассказать. Все то, что ты тут пишешь. И результат будет точно такой, т.к. все равно ты полностью игноришь все что тебе отвечают и все равно не хочешь читать доки.

Просто форум в последнее время в какой-то треш превратился. Немного треша полезно для оживления, но когда 90% всех новых тем одно и то же - это перебор.
 

WMix

герр M:)ller
Партнер клуба

PHP:
class Builder{
    public function build(){
        echo "мы строили строили и наконец построили";
    }
}

class Foo{
    private $builder;
    
    public function __construct(){
        $this->builder = new Builder;
    }
    
    public static function x(callable $y){
        $foo = new static;
        $y($foo->builder);
    }
}

Foo::x(function(Builder $builder){
  $builder->build();
});
 
Последнее редактирование:

StalkerClasses

Новичок

PHP:
class Builder{
    public function build(){
        echo "мы строили строили и наконец построили";
    }
}

class Foo{
    private $builder;
 
    public function __construct(){
        $this->builder = new Builder;
    }
 
    public static function x(callable $y){
        $foo = new static;
        $y($foo->builder);
    }
}

Foo::x(function(Builder $builder){
  $builder->build();
});
Ооо спасибо... Это то что то близкое по теме...
Работаю сейчас с ларавель моделями и есть три типа кастомных функций

PHP:
    /**
     * Apply the scope to a given Eloquent query builder.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $builder
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @return void
     */
    public function globalScope(Builder $builder, Model $model)
    {
        $builder->where('created_at', '<', now()->subYears(2000));
         // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Здесь нет никакого return ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    }


    /**
     * Scope a query to only include active users.
     *
     * @param  \Illuminate\Database\Eloquent\Builder  $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeActive($query)
    {
        return $query->where('active', 1);
         // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Почему здесь идет Return? ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    }


    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany(User::class);
         // ->>>>>>>>>>>>>>>>>>>>>>>>>>>> А когда создается связь то идет вообще return $this ->>>>>>>>>>>>>>>>>>>>>>>>>
    }

Почему во всех этих трех функция все по разному?
Почему просто нельзя было бы исползьзовать везде например return $this->...
 

fixxxer

К.О.
Партнер клуба
Почему одни функции возвращают объекты одного класса, другие - объекты другого класса, третьи - boolean, а четвертые ничего не возвращают? Что за ерунда такая в этом вашем программировании, почему просто нельзя было бы всегда возвращать одно и то же?
 

StalkerClasses

Новичок
Почему одни функции возвращают объекты одного класса, другие - объекты другого класса, третьи - boolean, а четвертые ничего не возвращают? Что за ерунда такая в этом вашем программировании, почему просто нельзя было бы всегда возвращать одно и то же?
Вот и поговорили.
 

WMix

герр M:)ller
Партнер клуба
когда ты пишешь слово "кастомных" что ты имеешь в виду?
я под этим словом обычно понимаю "то что изменено по отношению к оригиналу"
 

StalkerClasses

Новичок
когда ты пишешь слово "кастомных" что ты имеешь в виду?
я под этим словом обычно понимаю "то что изменено по отношению к оригиналу"
КАСТОМНЫЙ
, (от англ. custom) - произвольный, отличающийся от стандартного набора чего-либо, сделанный на заказ и под определенные не типовые требования. Ка́стом (англ. custom — изготовленный на заказ) — транспортное средство (чаще используется по отношению к мотоциклам), изготовленное в единственном или крайне малом количестве экземпляров, обычно это иначе оформленные или полностью переделанные серийные модели мотоциклов или автомобилей.

Т.е. добавлено то чего нет.

Или не правильно употребляю в данном случае слово кастомное?
Как правильно сказать пользовательская функция???
Возможно немного ошибся в названиях своих функций:

PHP:
// A) Global scope (user function global scope register)
// See example: builderGsCustomFlagDeleted();
// $rows = NewTable::get(); // Results sorted by default by uid field
// $rows = NewTable::withoutGlobalScope('customNameGlobalCondition')->get(); // No sorting by default

//////////// Второй вариант названия: builderUserGlobalScope[Name]()
public function builderGsCustomNameGlobalCondition($builder) {
    $builder->orderBy('uid','Desc');
}

// B) Local scope (user function local scope register)
// See example: builderLsCustomPagination();
// $rows = NewTable::customNameCondition(1,2)->get();

//////////// Второй вариант названия:  // builderUserLocalScope[Name]()
public function builderLsCustomNameCondition($agr1 = 5, $arg2 = 4){
    return $this->where('uid','>',$agr1)->where('uid','<',$arg2);
}

// C) Relationship (user function register)
// $rows = NewTable::with('customNameRelationship')->get();

//////////// Второй вариант названия // builderUserRef[Name]()
public function builderRefCustomNameRelationship() {
    return $this->refProvider('exampletable4_rows');
}
 

Вложения

Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
а че не понятного? те кто выполняет данные инструкции, просят по минимуму. order by это не про модель запроса как и limit
 

StalkerClasses

Новичок
а че не понятного? те кто выполняет данные инструкции, просят по минимуму. order by это не про модель запроса как и limit
Вот и имею в виду что любая функция которая имеет префикс например "
builderLsCustom -> говорит о том, что ее кто-то добавил - локальный скоуп.

Как вариант можно было еще назвать: builderLsUser - но думаю что все будут путаться из-за слова User...
 

Yoskaldyr

"Спамер"
Партнер клуба
Мне кажется это или карантин так влияет или ТС сменил своего постоянного дилера... Другое ничего в голову не приходит.
Потому что не знаю как еще объяснить такой полет фантазии.
 

Adelf

Administrator
Команда форума
да он всегда такой был. вместо того чтобы решать реальную задачу балуется магией, играет в игрушку как ребенок.
 
Сверху