Вы можете использовать с этим форматом (протестировано на Laravel 5.5), в моем случае я использовал для получения данных о соединениях с базой данных и использования на контроллере:
$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');
Второй параметр может быть нулевым или установите любое значение по умолчанию, если DB_USERNAMEchild имеет значение null.
Ваш .env файл может быть таким же:
DB_HOST=localhost
DB_DATABASE=FATHERBD
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild
Неявный оператор
работает только для присваивания.
Вы хотите перегрузить оператор равенства ( ==
) как таковой:
class a
{
public static bool operator ==(a x, b y)
{
return x == y.a;
}
public static bool operator !=(a x, b y)
{
return !(x == y);
}
}
class b
{
public a a{get;set;}
public static implicit operator a(b b)
{
return b.a;
}
}
Это должно позволить вам сравнить два объекта типа a
и b
, как предлагается в вашем сообщении.
var x = new a();
var y = new b();
bool c = (x == y); // compiles
Примечание:
Я рекомендую просто переопределить GetHashCode
и Equals
, как предупреждает компилятор, но, поскольку вы, кажется, хотите подавить их, вы можете сделать это следующим образом.
Измените объявление вашего класса a
to:
#pragma warning disable 0660, 0661
class a
#pragma warning restore 0660, 0661
{
// ...
}
Можно ли использовать оператор == в экземпляры разных типов, где один можно неявно преобразовать в другое?
Да.
Что я пропустил?
Вот соответствующая часть спецификации. Вы пропустили выделенное слово.
Предопределенное равенство ссылочного типа операторы требуют, чтобы оба операнда являются значениями ссылочного типа или буквальный нуль. Кроме того, стандарт неявное преобразование существует из тип любого операнда к типу другой операнд.
Пользовательское преобразование по определению не является стандартным преобразованием. Это ссылочные типы. Следовательно, предопределенный оператор равенства ссылочных типов не является кандидатом.
Если типы должны быть одинаковыми, вызывая ==, тогда почему [double == int] работает?
Ваше предположение, что типы должны быть одинаковыми, неверно. Существует стандартное неявное преобразование из int в double и есть оператор равенства, который принимает два двойных значения, так что это работает.
Я думаю, вы также пропустили этот бит:
Это ошибка времени компиляции, чтобы использовать предопределенное равенство ссылочного типа операторы для сравнения двух ссылок которые, как известно, отличаются время компиляции. Например, если типы операндов во время компиляции два типа классов A и B, и если ни A, ни B не происходят от другое, то было бы невозможно два операнда для ссылки на один и тот же объект. Таким образом, операция считается ошибкой времени компиляции.
Я предполагаю, что вам нужно фактически переопределить оператор == для интересующих вас типов. Будет ли среда компиляции / выполнения по-прежнему жаловаться, даже если типы являются неявными convertable - это то, с чем вам придется поэкспериментировать.
public static bool operator ==(a a, b b)
{
//Need this check or we can't do obj == null in our Equals implementation
if (((Object)a) == null)
{
return false;
}
else
{
return a.Equals(b);
}
}
В качестве альтернативы просто используйте реализации Equals, такие как ole6ka, и убедитесь, что реализация выполняет необходимое преобразование типов.
http://msdn.microsoft.com/en-us/library/8edha89s.aspx
В каждом случае один параметр должен быть того же типа, что и класс или структура который объявляет оператор (...)