Вместо нижней строки
//header("Location:".ADMIN_URL."/index.php");
напишите
echo("<script>location.href = '".ADMIN_URL."/index.php?msg=$msg';</script>");
или
?><script><?php echo("location.href = '".ADMIN_URL."/index.php?msg=$msg';");?></script><?php
Это определенно решит вашу проблему. Я столкнулся с одной и той же проблемой, но решил решить эту проблему путем написания заголовка.
Добавление MyArray
к MyArray
для получения Array
может быть нелогичным, но метод может быть определен для возврата любого класса. А в случае Array#+
, который вы вызываете, просто определено, что он возвращает Array
. Вот и все.
Если вы хотите, чтобы он возвращал MyArray
, один из способов сделать это - определить MyArray#+
следующим образом:
class MyArray < Array
def +other
MyArray.new(super)
end
end
(MyArray.new([1, 2, 3]) + MyArray.new([4, 5])).class # => MyArray
Кстати, обратите внимание, что ваше определение MyArray#initialize
бессмысленно и, следовательно, излишним.
Я не понимаю, почему мой массив "a" не является классом "MyArray" после добавления.
blockquote>Почему это должно быть (
MyArray
)? Операция конкатенации для массивов определена так, чтобы возвращать новыйArray
, так что здесь происходит. https://ruby-doc.org/core-2.5.3/Array.html#method-i-2BЕсли вы хотите, вы можете переопределить эту операцию в своем классе, чтобы вернуть экземпляр MyArray. Не забывайте обо всех других подобных методах.
По этой же причине плохая идея создавать подклассы стандартных коллекций. Здесь лучше использовать композицию, а не наследование.
Просто добавить немного к ответу Серхио с точки зрения его комментария об использовании композиции вместо наследования и обмена в комментариях.
Вместо того, чтобы говорить, что MyArray является массивом, вы можете сказать, что MyArrayLike имеет и массив. Затем вы можете «перенаправить» методы, которые имеют смысл, в базовый массив, но при этом добавить собственную функциональность, которая имеет смысл для вашего класса без массива подклассов.
В Ruby даже есть несколько способов сделать это очень легко, включая модуль Forwardable .
class MyArrayLike
attr_reader :arr
def initialize( initial_arr )
@arr = initial_arr
end
def +(other)
result = self.class.new(arr + other.arr)
# maybe you want to do more than just concat the underlying array, if so you can do it here
result
end
def first
# for example maybe you want first to just return the first item in the underlying array.
arr.first
end
end
a = MyArrayLike.new([1,2,3])
b = MyArrayLike.new([4,5])
puts "a.class = #{a.class}"
# => a.class = MyArrayLike
puts a
# => #<MyArrayLike:0x00000000dc4b00>
a += b
puts "a.class = #{a.class}"
# => a.class = MyArrayLike
puts a
# => #<MyArrayLike:0x00000000dc4470>
puts a.first
# => 1
puts a.arr
# => 1
# 2
# 3
# 4
# 5