Возможно вопрос глупый, но, видимо глаз уже замылился и не вижу очевидного. При работе с классом возникла такая ошибка: 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) решается перепроектированием объекта, но это не предмет вашего вопроса.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Для записи данных в другой файл использую следующий код:
Доброй ночиНаписал постер сообщений в свою группу ВК, но появилась проблема
Как средствами PHP получить extended public key, необходимый для создания hd bitcoin кошелька?
есть два контекста, в web лежит основной каталог, в catalog лежит старые товары(вынес для удобства администрирования) если в конце адресной строки...