PHP: Проверьте, является ли переменная экземпляром определенного класса

В конце я сделал это почти точно путь raboof предложенный (и подобный какой предложенный dgvid), кроме с некоторыми незначительными изменениями и некоторым зафиксированным пропуском. Я выбрал этот метод, потому что это было самым близким к тому, что я искал во-первых и не потребовал использования никаких сторонних исполняемых файлов и такого. Это работает отлично!

Это - то, на что мой код закончил тем, что был похож:

РЕДАКТИРОВАНИЕ: Я решил переместить эту функцию в другой блок, таким образом, я мог снова использовать его в нескольких файлах (я просто передаю в блоке. GetExecutingAssembly ()).

Это - обновленная версия, которая позволяет Вам передавать в блоке со встроенным dlls.

embeddedResourcePrefix является строковым путем к встроенному ресурсу, это обычно будет название блока, сопровождаемого любой структурой папок, содержащей ресурс (например, "MyComapny. MyProduct. MyAssembly. Ресурсы", если dll находится в папке под названием Ресурсы в проекте). Это также предполагает, что dll имеет .dll.resource расширение.

   public static void EnableDynamicLoadingForDlls(Assembly assemblyToLoadFrom, string embeddedResourcePrefix) {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { // had to add =>
            try {
                string resName = embeddedResourcePrefix + "." + args.Name.Split(',')[0] + ".dll.resource";
                using (Stream input = assemblyToLoadFrom.GetManifestResourceStream(resName)) {
                    return input != null
                         ? Assembly.Load(StreamToBytes(input))
                         : null;
                }
            } catch (Exception ex) {
                _log.Error("Error dynamically loading dll: " + args.Name, ex);
                return null;
            }
        }; // Had to add colon
    }

    private static byte[] StreamToBytes(Stream input) {
        int capacity = input.CanSeek ? (int)input.Length : 0;
        using (MemoryStream output = new MemoryStream(capacity)) {
            int readLength;
            byte[] buffer = new byte[4096];

            do {
                readLength = input.Read(buffer, 0, buffer.Length); // had to change to buffer.Length
                output.Write(buffer, 0, readLength);
            }
            while (readLength != 0);

            return output.ToArray();
        }
    }
18
задан drewish 16 December 2014 в 21:09
поделиться

5 ответов

Лучшим способом было бы выполнить новую установку.

Измените URL-адрес сайта на действующий перед экспортом базы данных. Импортируйте свою базу данных на действующий сервер. Загрузите и распакуйте файлы Magento. поскольку $ _GET ["valid_user"] исходит из запроса и никогда не будет объектом.

isUser (), вероятно, является настраиваемой функцией из библиотеки управления пользователями, которая аутентифицирует текущий сеанс. Вам нужно посмотреть, как это работает, если вы хотите его заменить.

46
ответ дан 30 November 2019 в 06:17
поделиться

вы можете попробовать следующее:

if (is_object($_GET['valid_user']))
{
     // more code here
}
2
ответ дан 30 November 2019 в 06:17
поделиться

Переменные $ _ GET [] - это больше константы, чем переменные, они доступны только для чтения ... но к ним можно получить доступ, как и к любому другое $ переменная .

В вашем примере:

if (isUser($_GET['valid_user']))
{
...
}

Я бы надеялся , что он будет читать:

if (isUser($some_sanatized_variable))

.. если это не isUser (). «Переменные», которые устанавливает PHP, не принадлежат ни к какому классу, что иллюстрирует мою озабоченность тем, что isUser () может не знать, с чем он имеет дело.

0
ответ дан 30 November 2019 в 06:17
поделиться

В языке PHP есть функция, которая может вам помочь:

bool is_a ( object $object , string $class_name )

Из документации : Проверяет, принадлежит ли объект этот класс или имеет этот класс в качестве одного из его родителей

5
ответ дан 30 November 2019 в 06:17
поделиться

is_object, чтобы проверить, является ли он объектом, и ссылка ниже объясняет, как проверить, какой класс

http://hr.php.net/manual/en/reflectionclass.isinstance.php

0
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: