Эффективный PHP и называющие стратегии с автозагрузкой

Вы были очень близки, но вместо шага 3 к сгенерированной ссылке общего доступа необходимо добавить download=1 параметр запроса url, чтобы создать ссылку для скачивания , например:

https://{tenant}-my.sharepoint.com/:i:/g/personal/{account-name}_onmicrosoft_com/{token}?download=1

[117 Вот и все.

Просто примечание относительно ошибки, которая возникает на шаге 3.

Ссылка для обмена, созданная для OneDrive для бизнеса или SharePoint ( https://tenant-my.sharepoint.com ), не может быть использована с помощью OneDrive Personal ( https: //api.onedrive .com ) shares конечная точка

blockquote>

38
задан tereško 10 February 2013 в 10:58
поделиться

3 ответа

This is what I have been using in all of my projects (lifted straight from the source of the last one):

public static function loadClass($class)
{
    $files = array(
        $class . '.php',
        str_replace('_', '/', $class) . '.php',
    );
    foreach (explode(PATH_SEPARATOR, ini_get('include_path')) as $base_path)
    {
        foreach ($files as $file)
        {
            $path = "$base_path/$file";
            if (file_exists($path) && is_readable($path))
            {
                include_once $path;
                return;
            }
        }
    }
}

If I look for SomeClass_SeperatedWith_Underscores it will look for SomeClass_SeperatedWith_Underscores.php followed by SomeClass/SeperatedWith/Underscores.php rooted at each directory in the current include path.

EDIT: I just wanted to put out there that I use this for efficiency in development, and not necessarily processing time. If you have PEAR on your path then with this you can just use the classes and don't have to include them when you need them.

I tend to keep my classes in a hierarchy of directories, with underscores breaking up namespaces... This code lets me keep the file structure nice and tidy if I want, or to inject a quick class file without nested directories if I want (for adding a single class or two to a library that it is defendant on, but not part of the project I am currently working on.)

28
ответ дан 27 November 2019 в 03:49
поделиться

Я приземлился на это решение:

Я создал один скрипт, который пересекает мою папку библиотеки классов (которая содержит подпапки для отдельных модулей / систем) и анализирует содержимое файла в поисках определений классов. Если он находит определение класса в файле php (довольно простой шаблон регулярных выражений), он создает символическую ссылку:

class_name.php -> actual/source/file.php

Это позволяет мне использовать одну простую функцию автозагрузки, которой требуется только имя класса и путь к главной папке символической ссылки, и не нужно выполнять никаких манипуляций с путями / строками.

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

13
ответ дан 27 November 2019 в 03:49
поделиться

Если вы хотите повысить эффективность, вам вообще не следует использовать функцию автозагрузки. Функция автозагрузки для ленивости. При включении вы должны указать явный путь к вашим включаемым файлам. Если ваша функция автозагрузки может найти эти файлы, вы можете написать код, чтобы найти их явно. Когда вы работаете над частью представления и собираетесь загрузить новый класс представления, позволяя функции автозагрузки обрабатывать его, сначала предполагается, что ваш класс является классом модели? Это неэффективно. Вместо этого ваш код должен выглядеть следующим образом:

include_once $this->views_path . $class . '.php';

Если вам нужно несколько путей «просмотра», создайте функцию, которая загружает представления:

public function load_view($class) {
    // perhaps there's a mapping here instead....
    foreach ($this->views_paths as $path) {
        $filename = $path . $class . '.php';
        if (file_exists($filename)) {
            include_once $filename;
        }
    }
    throw ....
}

В любом случае, в точке, где происходит включение, у вас есть наибольшая / самая точная информация о класс, который вы хотите загрузить. Использование этой информации для полной загрузки класса является единственной эффективной стратегией загрузки классов. Да, вы можете получить больше переменных класса или (боже упаси) некоторые глобальные переменные. Но это лучший компромисс, чем просто лениться и сканировать части файловой системы для вашего класса.

8
ответ дан 27 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

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