Возможно вопрос глупый, но, видимо глаз уже замылился и не вижу очевидного. При работе с классом возникла такая ошибка: Uncaught Error: Call to a member function getActiveSheet() on null in C:\OSPanel\domains\projectOKK\includes\tablehandler.inc.php:320
Вот сам код tablehandler:
class TableHandler extends Dbh {
public function exportSupport($from){
$operator = mysqli_real_escape_string($this->connect(), $from);
$objPHPExcel = new PHPExcel();// Создаем объект класса PHPExcel
$objPHPExcel->setActiveSheetIndex(0);// Устанавливаем индекс активного листа
$sheet = $objPHPExcel->getActiveSheet();// Получаем активный лист
$sheet->setTitle(''.$operator.''); // Подписываем лист
//Функция для покраски ячеек со строки 320
function cellColor($cells,$color){
global $objPHPExcel;
$objPHPExcel->getActiveSheet()->getStyle($cells)->getFill()->applyFromArray(array(
'type' => PHPExcel_Style_Fill::FILL_SOLID,
'startcolor' => array(
'rgb' => $color
)
));
}
cellColor('A2', 'c6d6b0');
}
}
Возможно какая-то ошибка в области видимости, но я уже не знаю, что делать) Помогите пожалуйста.
Как и первый ответ, есть еще способ более простой, чтобы Вам не переписывать структуру класса. Использовать анонимную функцию, передав ей необходимый объект в качестве замыкания тем самым избегая использование глобальных переменных. Пример:
$cellColor = function($cells,$color) use ($objPHPExcel){
//Ваш код
}
$cellColor('A2', 'c6d6b0');
Метод cellColor() не видит переменную $objPHPExcel в локальной и глобальной областей видимости.
Можно решить проблему так: в метод exportSupport() добавить global $objPHPExcel;.
Но я противник "замусоривания" глобальной области и предлагаю в методе exportSupport() значение переменной $objPHPExcel присвоить свойству объекта и его уже использовать в методе cellColor():
class TableHandler extends Dbh {
private objPHPExcel;
public function exportSupport($from)
{
...
$this->objPHPExcel = $objPHPExcel;
{
public function cellColor($cells,$color)
{
$this->objPHPExcel->getActiveSheet()-> ...
}
}
После исправления проблемы с областью видимости $objPHPExcel у вас может возникнуть еще одна проблема:
Метод cellColor() "завязан" на уже проинициализированный объект св-ва objPHPExcel и должен вызываться ПОСЛЕ метода exportSupport(). Это, так называемое, связывание(coupling) решается перепроектированием объекта, но это не предмет вашего вопроса.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей