Возможно вопрос глупый, но, видимо глаз уже замылился и не вижу очевидного. При работе с классом возникла такая ошибка: 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) решается перепроектированием объекта, но это не предмет вашего вопроса.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости